HDU1839---Delay Constrained Maximum Capacity Path

原创 2013年12月05日 18:40:21

http://acm.hdu.edu.cn/showproblem.php?pid=1839

解题思路:二分+最短路

直接对答案进行二分枚举,然后用spfa求最短路,如果边的权值小于当前枚举的答案,那么这样的边是不能走的。


源代码:

//二分+最短路
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

typedef long long ll;
const int maxn=10005;
const int maxm=100005;
const int INF= 2000000005;

int vis[maxm],first[maxn];
int to[maxm],next[maxm],cc[maxm],tt[maxm],ecnt;
int dis[maxn];
int n,m,t;
int que[maxm];

inline void add(int a,int b,int c,int d)
{
    vis[ecnt]=0;
    cc[ecnt]=c;
    tt[ecnt]=d;
    to[ecnt]=b;
    next[ecnt]=first[a];
    first[a]=ecnt++;

    vis[ecnt]=0;
    cc[ecnt]=c;
    tt[ecnt]=d;
    to[ecnt]=a;
    next[ecnt]=first[b];
    first[b]=ecnt++;
    return;
}

void init()
{
    for(int i=1;i<=n;i++)   dis[i]=INF,vis[i]=0;
    dis[1]=0;
    vis[1]=1;
    return;
}
int spfa(int lc)   //容量限制
{
    int f=0,r=1;
    que[f]=1;
    init();
    while(f!=r)
    {
        int now=que[f++];
        vis[now]=0;
        for(int i=first[now];i!=-1;i=next[i])
        {
            int kid=to[i];
            if(cc[i]>=lc && dis[kid]>dis[now]+tt[i])
            {
                dis[kid]=dis[now]+tt[i];
                if(!vis[kid] && dis[kid]<t)
                {
                    vis[kid]=1;
                    que[r++]=kid;
                }
            }
        }
    }
    if(dis[n]<=t)   return 1;
    return 0;
}

void solve()
{
    ll f=1,r=INF;
    while(f<r)
    {
        int min=(f+r)/2;
        if(spfa(min))   f=min+1;
        else    r=min-1;
    }
    if(!spfa(f))    f--;
    printf("%d\n",f);
    return;
}
int main()
{
//    freopen("in.txt","r",stdin);
    int cs;
    scanf("%d",&cs);
    while(cs--)
    {
        scanf("%d%d%d",&n,&m,&t);
        ecnt=0;
        memset(first,-1,sizeof(first));
        for(int i=0;i<m;i++)
        {
            int a,b,c,d;
            scanf("%d%d%d%d",&a,&b,&c,&d);
            add(a,b,c,d);
        }
        solve();
    }
    return 0;
}


相关文章推荐

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

传送门:【HDU】1839 Delay Constrained Maximum Capacity Path

hdu 1839 Delay Constrained Maximum Capacity Path 二分+最短路

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1839题意:有N个点,点1为珍贵矿物的采矿区, 点N为加工厂,有M条双向连通的边连接这些点。走每条边的运...
  • yxg_123
  • yxg_123
  • 2017年03月05日 16:07
  • 74

HDU-1839-Delay Constrained Maximum Capacity Path

ACM模版描述题解第一次做这种组合算法题,二分+dij,没做过很难想到这样子搞,于是参考了大牛shuangde800的代码和题解。该大牛的题解分析道:因为每条路径的容量取决于这条路径中所有边中的最小容...
  • f_zyj
  • f_zyj
  • 2016年11月26日 17:19
  • 142

hdu 1839 Delay Constrained Maximum Capacity Path 二分下限+最短路spfa

题目链接 题意:给出n个点和m条边,给出每条路的容量和时间。路径的容量为路径上边的容量的最小值。求满足总时间小于T的情况下的最大路径容量。 用二分枚举路径的容量下限,只取容量大于枚举值的边求最短路...

HDU - 1839 Delay Constrained Maximum Capacity Path

Consider an undirected graph with N vertices, numbered from 1 to N, and M edges. The vertex numbered...

hdu 1839:Delay Constrained Maximum Capacity Path

1点是珍贵矿场,N点是矿物加工厂,xian'zai

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

Delay Constrained Maximum Capacity Path 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1839 解题...

HDU 1839 Delay Constrained Maximum Capacity Path

Problem Description Consider an undirected graph with N vertices, numbered from 1 to N, and M edg...

hdu 1839 Delay Constrained Maximum Capacity Path【二分+SPFA】

Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit:...

hdu1839Delay Constrained Maximum Capacity Path 二分+最短路

//一个无向图,两点之间的流量为c,两点花的时间为t //问从起点到终点n之间时间小于等于T且只走一条路径能够运输的最大流量为多少 //二分流量,小于这个流量的路径不走,求其时间是否小于等于T得到答案...
  • cq_pf
  • cq_pf
  • 2015年08月01日 13:38
  • 389
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU1839---Delay Constrained Maximum Capacity Path
举报原因:
原因补充:

(最多只允许输入30个字)