hdu 4240 Route Redundancy(最大流)
2013-07-23 22:08
344 查看
这题下午做比赛的时候没有做出来,可能是题意没有很好的理解,后来又想了想,有些清楚了,就是找出图中的流量最大的一条路径,然后就输出最大流与该路径的最大流量的比值,每找一条路径的时候记录这条路的最小流量,然后在这些最小的流量里找到最大的那一个流量,最后输出比值。
#include<iostream> #include<cstdio> #include<string.h> #include<algorithm> #include<math.h> #include<queue> #include<stack> #include<map> #include<vector> #define mm(a,b) memset(a,b,sizeof(a)) using namespace std; const int inf=0x7ffffff; const double PI=acos(-1.0); const double eps=1e-8; const double e=2.7182818284590452354; const int maxn=1010; int c[maxn][maxn]; int flow[maxn][maxn]; bool vis[maxn]; int minf[maxn]; int pre[maxn]; int n,m,tmp,mic; int maxflow(int s,int t) { int f,u; queue<int> q; mm(flow,0); f=0; mic=-9999999; while(1) { q.push(s); mm(vis,0); mm(minf,0); vis[s]=1; minf[s]=inf; while(!q.empty()) { u=q.front(); q.pop(); for(int i=0;i<n;i++) { if(!vis[i] && c[u][i]-flow[u][i]>0) { vis[i]=1; minf[i]=min(minf[u],c[u][i]-flow[u][i]); q.push(i); pre[i]=u; } } } f+=minf[t]; if(minf[t]==0) break; tmp=inf; for(int i=t;i!=s;i=pre[i]) { flow[i][pre[i]]-=minf[t]; flow[pre[i]][i]+=minf[t]; tmp=min(tmp,c[pre[i]][i]); } mic=max(mic,tmp); } return f; } int main() { int tt,cas,s,t,u,v,w; scanf("%d",&tt); while(tt--) { scanf("%d%d%d%d%d",&cas,&n,&m,&s,&t); mm(c,0); while(m--) { scanf("%d%d%d",&u,&v,&w); c[u][v]+=w; } printf("%d %.3lf\n",cas,maxflow(s,t)*1.0/mic); } return 0; }
相关文章推荐
- hdu 4240(最大流+最大流量的路)
- hdu 4240在(最大流)
- HDU_4240_Route Redundancy(最大流dinic or EK)
- hdu 4240 最大流dicnic
- HDU 4240 --Route Redundancy【最大流dinic && DFS】
- hdu 4240 Route Redundancy 最大流 isap
- hdu 4240 Route Redundancy(求起点到终点的路径中流量最大的路径的流量)
- hdu 4240 Route Redundancy 最大流
- HDU 4240 Route Redundancy 一条流最大的路径
- HDU 4240 Route Redundancy(基础) [最大流]一条流最大的路径
- [最大流] hdu 4240 Route Redundancy
- hdu 4240 Route Redundancy(最大流)
- hdu 4240在(最大流)
- HDU 4240 Route Redundancy【最大流】
- hdu 4240 最大流量路径
- HDU — 4240 Route Redundancy(最大流)
- HDU-1231(求最大序列和)
- 【HDU】 3081 Marriage Match II (最大流+并查集)
- hdu 1024 最大M子段和
- HDU 4619 (二分图匹配 最大独立集)