HDU 4240 Route Redundancy
来源:互联网 发布:联想网络唤醒bios设置 编辑:程序博客网 时间:2024/05/16 08:58
模板题。
只需要在找路径减去流量的过程中找到那个最大的就行了。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <set>#include <vector>#include <map>#include <queue>#include <set>#include <algorithm>#include <limits.h>using namespace std;#define MAXN 1500#define MAXM 600000const int INF = INT_MAX;typedef long long LL;struct Edge{ int from,to,ci,next; Edge(){} Edge(int _from,int _to,int _ci,int _next):from(_from),to(_to),ci(_ci),next(_next){}}e[MAXM];int head[MAXN],tot;int dis[MAXN];int top,sta[MAXN],cur[MAXN];int n,m,maxx=0;inline void init(){ memset(head,-1,sizeof(head)); tot=0;}inline void AddEdge(int u,int v,int ci0,int ci1=0){ e[tot]=Edge(u,v,ci0,head[u]); head[u]=tot++; e[tot]=Edge(v,u,ci1,head[v]); head[v]=tot++;}inline bool bfs(int st,int et){ memset(dis,0,sizeof(dis)); dis[st]=1; queue <int> q; q.push(st); while(!q.empty()){ int now=q.front(); q.pop(); for(int i=head[now];i!=-1;i=e[i].next){ int next=e[i].to; if(e[i].ci&&!dis[next]){ dis[next]=dis[now]+1; if(next==et)return true; q.push(next); } } } return false;}int Dinic(int st,int et){ int ans=0; while(bfs(st,et)){ //printf("here\n"); top=0; memcpy(cur,head,sizeof(head)); int u=st,i; while(1){ if(u==et){ int pos,minn=INF; //printf("top:%d\n",top); for(i=0;i<top;i++) { if(minn>e[sta[i]].ci){ minn=e[sta[i]].ci; pos=i; } //printf("%d --> %d\n",e[sta[i]].from,e[sta[i]].to); } for(i=0;i<top;i++){ e[sta[i]].ci-=minn; e[sta[i]^1].ci+=minn; } top=pos; u=e[sta[top]].from; ans+=minn; if(minn>maxx)maxx=ans; //printf("minn:%d\n\n",minn); } for(i=cur[u];i!=-1;cur[u]=i=e[i].next) if(e[i].ci&&dis[u]+1==dis[e[i].to])break; if(cur[u]!=-1){ sta[top++]=cur[u]; u=e[cur[u]].to; } else { if(top==0)break; dis[u]=0; u=e[sta[--top]].from; } } } return ans;}int main() { int t,d,n,m,a,b; scanf("%d",&t); while(t--) { scanf("%d%d%d%d%d",&d,&n,&m,&a,&b); init(); for(int i=0,x,y,wi;i<m;i++) { scanf("%d%d%d",&x,&y,&wi); AddEdge(x,y,wi); } maxx=0; int tt=Dinic(a,b); //printf("tt:%d maxx:%d\n",tt,maxx); //double ans=(double)Dinic(a,b)/maxx; double ans=(double)tt/maxx; printf("%d %.3lf\n",d,ans); } return 0;}
0 0
- HDU 4240 Route Redundancy
- HDU 4240 Route Redundancy
- hdu 4240 Route Redundancy(dinic)
- [最大流] hdu 4240 Route Redundancy
- hdu 4240 Route Redundancy(最大流)
- hdu 4240 Route Redundancy(最大流)
- hdu 4240 Route Redundancy 网络流
- 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【最大流dinic && DFS】
- hdoj 4240 Route Redundancy 【最大流+ SPFA】
- 【 hdoj 4240】 Route Redundancy 【dinic+spfa】
- HDU 4240 Route Redundancy(基础) [最大流]一条流最大的路径
- HDU4240 Route Redundancy
- hdu 4240 Route Redundancy(求起点到终点的路径中流量最大的路径的流量)
- 哪个对象才是锁?
- [递归与分治]棋盘覆盖问题
- POJ2001——Shortest Prefixes
- 华为机试练习---进制数的相互转换
- Dedecms文件目录结构解说
- HDU 4240 Route Redundancy
- 关于WinForm的单例模式
- Android中的apk签名
- wbox和FusionCharts
- swift学习日志-1基础篇 常量变量 布尔值 元组
- 关于bom,以及和bom有关的PHP验证码出不来的问题
- hdu 4405 简单概率dp
- 花生壳绑定域名
- HDU 2883 kebab