hdu1839Delay Constrained Maximum Capacity Path 二分+最短路

//一个无向图,两点之间的流量为c,两点花的时间为t
//问从起点到终点n之间时间小于等于T且只走一条路径能够运输的最大流量为多少
//二分流量,小于这个流量的路径不走,求其时间是否小于等于T得到答案
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std ;
const int maxn = 10010 ;
const int maxm = 50010 ;
const int inf = 0x3f3f3f3f ;
struct Edge
{
    int v , t , c ;
    int next ;
}edge[maxm<<1] ;
int head[maxn] ;
int nedge ;
int vis[maxn] ;
int dis[maxn] ;
int n  , m , t ;
void addedge(int u , int v , int c , int t)
{
    edge[nedge].v = v ;
    edge[nedge].t = t ;
    edge[nedge].c = c;
    edge[nedge].next = head[u] ;
    head[u] = nedge++ ;
}
bool spfa(int num)
{
    queue<int> que;
    memset(vis , 0  ,sizeof(vis)) ;
    for(int i = 2;i <= n;i++)
    dis[i] = inf ;
    dis[1] = 0 ;
    que.push(1) ;
    vis[1] = 1;
    while(que.size())
    {
        int u = que.front() ;
        que.pop() ;
        vis[u] = 0 ;
        for(int i = head[u] ; i != -1 ; i = edge[i].next)
        {
            if(edge[i].c < num)
            continue ;
            int v = edge[i].v ;
            if(dis[v] > dis[u] + edge[i].t)
            {
                dis[v] = dis[u] + edge[i].t ;
                if(!vis[v])
                {
                    que.push(v) ;
                    vis[v] = 1;
                }
            }
        }
    }
    if(dis[n] <= t)return true ;
    return false ;
}
int find(int l , int r)
{
    while(l <= r)
    {
        int mid = (l + r) >> 1 ;
        if(spfa(mid))
        l = mid + 1 ;
        else r = mid - 1 ;
    }
    return r;
}
int main()
{
   // freopen("in.txt" ,"r" , stdin) ;
    int T ;
    scanf("%d" , &T) ;
    while(T--)
    {
        scanf("%d%d%d" , &n , &m , &t) ;
        memset(head , -1 , sizeof(head)) ;
        nedge = 0 ;
        int ma = 0 ;
        while(m--)
        {
            int u , v , c , t ;
            scanf("%d%d%d%d" , &u , &v , &c ,&t) ;
            addedge(u , v , c , t) ;
            addedge(v , u , c , t) ;
            ma = max(ma , c) ;
         }
        printf("%d\n" , find(0 , ma)) ;
    }
    return 0 ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 22:58:33

hdu1839Delay Constrained Maximum Capacity Path 二分+最短路的相关文章

HDU 1839 Delay Constrained Maximum Capacity Path(二分+最短路)

题目地址:HDU 1839 我去..原来这题这么简单...网络流中这种二分建图的方式做了一大堆了..这种题还能难倒我吗...白天一直没怎么看懂题,对题意懵懵懂懂的...晚上好好看了看题,这不就是网络流中练的最多的那种二分建图模型吗....只是把网络流算法改成最短路就行了..但是两个地方手残了没能在实验室当场A掉..sad... 这题就是二分最小容量,对满足容量的加边,对时间求最短路.如果最短时间比规定时间少的话就可以继续增加容量,直到不能增加为止. 代码如下: #include <iostrea

HDU1839Delay Constrained Maximum Capacity Path(二分答案+SPFA)经典

Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1314    Accepted Submission(s): 418 Problem Description Consider an undirected graph with N vertices, n

HDU1839_Delay Constrained Maximum Capacity Path(最短路+二分)

解题报告 http://blog.csdn.net/juncoder/article/details/38349019 题目传送门 题意: 有N个点,点1为珍贵矿物的采矿区, 点N为加工厂,有M条双向连通的边连接这些点.走每条边的运输容量为C,运送时间为D. 他们要选择一条从1到N的路径运输, 这条路径的运输总时间要在T之内,在这个前提之下,要让这条路径的运输容量尽可能地大. 一条路径的运输容量取决与这条路径中的运输容量最小的那条边. 思路: 二分容量建图,spfa判时间是否符合条件 #incl

【HDU 1839】 Delay Constrained Maximum Capacity Path(二分+最短路)

[HDU 1839] Delay Constrained Maximum Capacity Path(二分+最短路) Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1515    Accepted Submission(s): 481 Problem

复习图---Delay Constrained Maximum Capacity Path(SPFA+二分)

Delay Constrained Maximum Capacity Path Time Limit:10000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Submit Status Description Consider an undirected graph with N vertices, numbered from 1 to N, and M edges. The vertex numbered with

hdu 1839 Delay Constrained Maximum Capacity Path(spfa+二分)

Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 1790    Accepted Submission(s): 577 Problem Description Consider an undirected graph with N vertices, nu

hdu 1839 Delay Constrained Maximum Capacity Path

最短路+二分. 对容量进行二分,因为容量和时间是单调关系的,容量越多,能用的边越少,时间会不变或者增加. 因为直接暴力一个一个容量去算会TLE,所以采用二分. #include<cstdio> #include<vector> #include<cstring> #include<queue> #include<map> #include<algorithm> using namespace std; const int maxn =

hdu 2962 Trucking (二分+最短路Spfa)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1763    Accepted Submission(s): 618 Problem Description A certain local trucking co

二分+最短路

二分+最短路 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu POJ 3662 Description 多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意两根线杆之间没有电话线连接,一共有p(1<=p<=10000)对电话杆可以拉电话线.