hdu 1839 Delay Constrained Maximum Capacity Path 二分+ spfa

来源:互联网 发布:广东榕泰怎么有云计算 编辑:程序博客网 时间:2024/05/21 22:57


有N个点,点1为珍贵矿物的采矿区, 点N为加工厂,有M条双向连通的边连接这些点。走每条边的运输容量为C,运送时间为D。选择一条从1到N的路径运输, 这条路径的运输总时间要在T之内,在这个前提之下,要让这条路径的运输容量尽可能地大。一条路径的运输容量取决与这条路径中的运输容量最小的那条边。

带限制的最短路---

由于每条路都是有一定容量的,相对来说,容量越大那么满足的边就越少。就可以二分容量来求出满足的最大容量了。

#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>using namespace std;const int N = 100005;const int inf = 1 << 28;struct node{    int to, nxt, cost, cap;}e[N*5];int head[N], dis[N], vis[N];int cap[N];int cnt;int n, m, t;int limt;void init(){    cnt = 0;    memset(head, -1, sizeof(head));}bool cmp(int a, int b){    return a > b;}void add( int u, int v, int cap, int cost ){    e[cnt].to = v;    e[cnt].cap = cap;    e[cnt].cost = cost;    e[cnt].nxt = head[u];    head[u] = cnt++;    e[cnt].to = u;    e[cnt].cap = cap;    e[cnt].cost = cost;    e[cnt].nxt = head[v];    head[v] = cnt++;}void spfa(){    queue<int> q;    while(!q.empty())        q.pop();    memset(vis, 0, sizeof(vis));    for( int i = 1; i <= n; i++ )        dis[i] = inf;    dis[1] = 0;    vis[1] = 1;    q.push(1);    while( !q.empty() )    {        int now = q.front();        q.pop();        vis[now] = 0;        for( int i = head[now]; ~i; i = e[i].nxt )        if(e[i].cap >= limt)        {            int to = e[i].to;            if( dis[to] > dis[now] + e[i].cost )            {                dis[to] = dis[now] + e[i].cost;                if( !vis[to] )                {                    vis[to] = 1;                    q.push(to);                }            }        }    }}int main(){    int tot;    for( scanf("%d", &tot); tot--; )    {        scanf("%d%d%d", &n, &m, &t);        init();        int u, v, cp, tt;        for( int i = 1; i <= m; i++ )        {            scanf("%d%d%d%d", &u, &v, &cp, &tt);            cap[i] = cp;            add(u, v, cp, tt);        }        sort(cap+1, cap+1+m, cmp);        int l = 1, r = m;        while(l < r)        {            int mid = (l + r) >> 1;            limt = cap[mid];            spfa();            if( dis[n] == inf || dis[n] > t )                l = mid + 1;            else                r = mid;        }        printf("%d\n", cap[l]);    }    return 0;}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机桌面短信图标不见了怎么办 亚马逊账号注册扣款不成功怎么办 流量卡不用了怎么办啊 移动卡不想要了怎么办 b站调用速度过快怎么办 苹果系统占用19g怎么办 id被锁定了忘记密码怎么办 360儿童卫士忘记密码怎么办 微信注册忘记密码怎么办 旅行青蛙换手机iphone怎么办 网页邮箱添加不了附件怎么办 pos机密码忘了怎么办 在4楼上课地震了怎么办 微鲸电视待机打不开怎么办 苹果手机微信听不到语音怎么办 电信怎么办腾讯频看电视不要流量 孩子做事效率低怎么办教案 孩子做事效率低怎么办读后感 做事效率低总是焦虑怎么办 红米手机黑屏打不开怎么办 手机萤石云视频下载打不开怎么办 oppo打开网页视频慢怎么办? 晒课显示待提交怎么办 华为手机无法访问移动网络怎么办 晒课上传课堂实录太大怎么办 手机酷狗音乐下载要钱怎么办 手机酷狗下载要钱怎么办 酷我音乐没有声音怎么办 手机酷我音乐没有声音怎么办 酷我音乐歌曲下载收费怎么办 网易云下载超过每日上限怎么办 全民k歌领不了花怎么办 安卓全民k歌延迟怎么办 全民k歌唱歌延迟怎么办 全民k歌耳机延迟怎么办 word文档打开是乱码怎么办 全民k歌不能录音怎么办 全民k歌登录不上怎么办 平果手机迅雷闪退怎么办 电脑打开央视影音死机怎么办 先锋影音二级网页打不开怎么办