HDU 6214 Smallest Minimum Cut
来源:互联网 发布:淘宝客服发的红包 编辑:程序博客网 时间:2024/05/22 14:17
这个题就是求包含最少边数的最小割。比赛的时候想到的是把第一次最大流跑出来的割边集流量置1,其余的无穷大,然后再跑一次最大流,发现一直wa。
然后网上原来还有另外一种方法,那就是初始流量先乘上一个比边数大的数,然后加一,然后跑一次最大流,最后对乘上的这个数取模,得出来的就是答案。
#include <bits/stdc++.h>using namespace std;const int MAXN = 200+5;const int inf = 1e9;const int mod = 1024;int n,m;int s,e;struct node{ int u,v,f,next;} edge[2005],edge1[2005];int head[MAXN];int cnt;void add(int u,int v,int f){ edge[cnt].u = u; edge[cnt].v = v; edge[cnt].f = f; edge[cnt].next = head[u]; head[u] = cnt++; edge[cnt].u = v; edge[cnt].v = u; edge[cnt].f = 0; edge[cnt].next = head[v]; head[v] = cnt++;}int dis[MAXN];int bfs(int s,int t){ int u,v; memset(dis,-1,sizeof dis); dis[s] = 0; queue<int>q; q.push(s); while(!q.empty()) { u = q.front(); q.pop(); for(int i = head[u]; i != -1; i = edge[i].next) { v = edge[i].v; if(dis[v] == -1 && edge[i].f) { dis[v] = dis[u] + 1; q.push(v); } } } if(dis[t] > 0)return 1; return 0;}int dfs(int s,int t,int min1){ if(s == t)return min1; int flow,ans = 0; for(int i = head[s]; i != -1; i = edge[i].next) { int v = edge[i].v; if(dis[v] == dis[s] + 1 && edge[i].f && (flow = dfs(v,t,min(min1,edge[i].f)))) { edge[i].f -= flow; edge[i^1].f += flow; ans += flow; min1 -= flow; if(!min1)break; } } if(ans)return ans; dis[s] = -1; return 0;}int get_maxflow(int s,int e){ int max_flow = 0,flow; while(bfs(s,e)) { while((flow = dfs(s,e,inf))>0) { max_flow += flow; } } return max_flow;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); scanf("%d%d",&s,&e); cnt = 0; for(int i = 1; i <= n; ++i)head[i] = -1; int u,v,f; while(m--) { scanf("%d%d%d",&u,&v,&f); f *= mod; f++; add(u,v,f); } printf("%d\n",get_maxflow(s,e)%mod); } return 0;}
阅读全文
0 0
- HDU 6214 Smallest Minimum Cut
- Smallest Minimum Cut HDU
- HDU 6214 Smallest Minimum Cut 【最小割】
- HDU-6214 Smallest Minimum Cut(最小割)
- hdu 6124 Smallest Minimum Cut
- hdoj 6214 Smallest Minimum Cut
- HDU-6214 Smallest Minimum Cut(最大流)
- HDU 6214 Smallest Minimum Cut(最小割的最少割边数)
- Hdu 6214 Smallest Minimum Cut【Dinic-最大流最小割】
- HDU 6214 Smallest Minimum Cut 最小割(isap)
- Smallest Minimum Cut(HDU 6214 dinic模板)
- HDU 6214 Smallest Minimum Cut (最小割)
- Hdu 6214 Smallest Minimum Cut(最小割)
- 【2017 ACM/ICPC Asia Regional Qingdao Online 1009】hdu 6214 Smallest Minimum Cut
- HDU 6214 Smallest Minimum Cut (最小割最小割边)(两种算法的分析)
- HDU 6214 Smallest Minimum Cut 2017青岛网赛1009(最小割最小割边)
- HDU 6214 Smallest Minimum Cut(网络流 最小割最少边数)
- HDU 6214 Smallest Minimum Cut(求最小割的最少边数)
- 关于这次2017-9PAT甲考试的感想
- Vue中保存数据到磁盘文件
- 【2017青岛网络赛】hdu 6212 Zuma 1007 区间dp
- js函数
- chrome浏览器插件,让您浏览器页面游小鱼儿
- HDU 6214 Smallest Minimum Cut
- 重装系统
- 在JavaWeb中使用wangEditor3简单案例
- idea字体细小、抗锯齿等问题
- C++中string.find()函数与string::npos 理解
- php trait学习笔记
- BZOJ 3629-聪明的燕姿 【数学杂题】
- 第三周——项目三—求集合并集
- 自定义控件---添加子控件错误