标签:des style blog http color java os strong
解题报告
http://blog.csdn.net/juncoder/article/details/38349019
题意:
思路:
二分容量建图,spfa判时间是否符合条件
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define inf 99999999
using namespace std;
int n,m,T;
struct node {
int u,v,w,t,next;
} edge[501000],N[101000];
int head[101000],cnt;
void add(int u,int v,int w)
{
edge[cnt].v=v;
edge[cnt].t=w;
edge[cnt].next=head[u];
head[u]=cnt++;
}
int spfa()
{
int i,j,dis[10100],vis[10100];
for(i=1; i<=n; i++) {
dis[i]=inf;
vis[i]=0;
}
dis[1]=0;
vis[1]=1;
queue<int>Q;
Q.push(1);
while(!Q.empty()) {
int u=Q.front();
Q.pop();
vis[u]=0;
for(i=head[u]; i!=-1; i=edge[i].next) {
if(dis[edge[i].v]>dis[u]+edge[i].t) {
dis[edge[i].v]=dis[u]+edge[i].t;
if(!vis[edge[i].v]) {
vis[edge[i].v]=1;
Q.push(edge[i].v);
}
}
}
}
if(dis[n]<=T)
return 1;
return 0;
}
int slove(int mid)
{
memset(edge,0,sizeof(edge));
memset(head,-1,sizeof(head));
cnt=0;
for(int i=1; i<=m; i++) {
if(N[i].w>=mid) {
add(N[i].u,N[i].v,N[i].t);
add(N[i].v,N[i].u,N[i].t);
}
}
if(spfa())return 1;
return 0;
}
int main()
{
int tt,i,j;
scanf("%d",&tt);
while(tt--) {
memset(N,0,sizeof(N));
scanf("%d%d%d",&n,&m,&T);
int l=0,r=-1;
for(i=1; i<=m; i++) {
scanf("%d%d%d%d",&N[i].u,&N[i].v,&N[i].w,&N[i].t);
if(N[i].w>r)
r=N[i].w;
}
int maxx=-1;
while(l<=r) {
int mid=(l+r)/2;
if(slove(mid)) {
l=mid+1;
maxx=mid;
} else r=mid-1;
}
printf("%d\n",maxx);
}
return 0;
}
2 2 1 10 1 2 13 10 4 4 20 1 2 1000 15 2 4 999 6 1 3 100 15 3 4 99 4
13 99
HDU1839_Delay Constrained Maximum Capacity Path(最短路+二分),布布扣,bubuko.com
HDU1839_Delay Constrained Maximum Capacity Path(最短路+二分)
标签:des style blog http color java os strong
原文地址:http://blog.csdn.net/juncoder/article/details/38349019