题目链接

https://vjudge.net/problem/UVA-10480

题意

无向图求最小割的方案

思路

最小割部分是模版,问题在于最小割的方案如何输出。

首先根据最小割最大流定理,我们跑一遍Dinic就可以求出最小割,这时残量网络中s和t已经不再联通了。我们可以从s开始跑一遍dfs,沿着所有还未满流的边搜索,所有能到达的节点就是和s在同一集合的节点。之后我们遍历每一条边,将边起点终点不在同一集合内的输出即可。

注意需要修改下链式前向星,每一个edge结构体内存一下起点。

附一篇最小割相关拓展的优质博客:https://www.cnblogs.com/lyttt/p/11817977.html

代码

#include<cstdio>
#include<iostream>
#include<iomanip>
#include<map>
#include<string>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl "\n"
//#define int long long
using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=1010;const int maxe=1010;int head[maxn],cnt;struct Edge{int u;int v;int w;int next;}edge[maxe];int n,m,s,t;ll maxflow;int deep[maxn];int now[maxe];bool s_or_t[maxn];//0代表和t相连,1是和s相连 void init(){memset(head,-1,sizeof(head));memset(s_or_t,0,sizeof s_or_t);cnt=0;maxflow=0; return ;    }void add(int u,int v,int w){// cout<<u<<" "<<v<<" "<<w<<endl;edge[cnt].u=u;edge[cnt].v=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt++;}inline bool bfs(){memset(deep,0x3f,sizeof(deep));queue<int>q;q.push(s);deep[s] = 0;now[s] = head[s];while(q.size()){int x = q.front();q.pop();for(int i=head[x];i!=-1;i=edge[i].next){int y=edge[i].v;if(edge[i].w>0&&deep[y]==inf){q.push(y);now[y]=head[y];deep[y]=deep[x]+1;if(y==t) return 1;}}}return 0;}ll dfs(int x,int flow){if(x==t) return flow;ll ans = 0,k,i;for(i=now[x];i!=-1&&flow;i=edge[i].next){now[x]=i;int y=edge[i].v;if(edge[i].w>0&&(deep[y]==deep[x]+1)){k=dfs(y,min(flow,edge[i].w));if(!k) deep[y]=inf;edge[i].w-=k;edge[i^1].w+=k;ans+=k;flow-=k;}}return ans;}    void dinic(){while(bfs())maxflow+=dfs(s,inf);}//在残量网络中跑dfs void output_dfs(int u){if(s_or_t[u])return ;else{s_or_t[u]=1;} for(int i=head[u];~i;i=edge[i].next)if(edge[i].w>0)//只能通过还有余量的边 output_dfs(edge[i].v);}int main(){    IOSwhile(cin>>n>>m){if(!n&&!m)break;init();while(m--){int u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,w);} s=1,t=2;dinic();output_dfs(s);for(int i=0;i<cnt;i+=2){int u=edge[i].u,v=edge[i].v;if(s_or_t[u]!=s_or_t[v])cout<<u<<" "<<v<<endl;}cout<<endl;}return 0;}

UVA - 10480 Sabotage 输出最小割方案相关推荐

  1. UVA - 10480 Sabotage 最小割,输出割法

    UVA - 10480 Sabotage 题意:现在有n个城市,m条路,现在要把整个图分成2部分,编号1,2的城市分成在一部分中,拆开每条路都需要花费,现在问达成目标的花费最少要隔开那几条路. 题解: ...

  2. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

  3. UVA - 10480 Sabotage(最小割-最大流+输出割边)

    题目链接:点击查看 题目大意:给出一张无向图,1为起点,2为终点,删除每条边都需要权值wi,题目需要求将起点与终点分割为两个部分的最小花费,并且输出方案 题目分析:如果不让输出方案的话就是一个裸的最大 ...

  4. UVA 10480 - Sabotage (最大流)

    这道题的意思要把一个图分成两部分,要把点1和点2分开.隔断每条边都有一个花费,求最小花费的情况下,应该切断那些边. 这题很明显是最小割,也就是最大流.把1当成源点,2当成汇点. 问题是要求最小割应该隔 ...

  5. UVA 10480 Sabotage

    最小割+输出方案 #include<cstdio> #include<cstring> #include<string> #include<cmath> ...

  6. UVA-10480 Sabotage(最大流最小割定理+输出路径)

    题目链接:UVA-10480 Sabotage The regime of a small but wealthy dictatorship has been abruptly overthrown ...

  7. 模板 - 最小割(常见最小割题型技巧总结)

    整理的算法模板合集: ACM模板 目录 一.集合划分模型 二.点边转化 三.最小割的可行边与必须边 四.二分图的可行边和必须边 五.平面图最小割 六.最小割的一些小技巧 1.记录划分方案 2.求割边数 ...

  8. bzoj 1934 最小割

    收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. 1 #include <cstdio> 2 #include <cmath> 3 #include &l ...

  9. Sabotage UVA - 10480 (最小割+求最小割去掉的具体边+ISAP)

    传送门 题意:给定n个点,m条带权无向边,源点s=1,汇点t=2.去掉一些边之后使s,t不连通,求去掉的这些边(而且还要满足去掉的边权和是所有答案中最小的--最小割). n<=50,m<= ...

最新文章

  1. Linux 用户行为日志记录
  2. ASan(Linux),gcc4.8以上版本自带的内存检查工具
  3. 使用docker搭建Hadoop
  4. 如何使用python批量压缩图片_Python实现批量压缩图片
  5. Windows下给SourceTree配置外部比较工具BeyondCompare
  6. js 逆向分析的神器 --- v_jstools
  7. Flutter轮播图
  8. iOS 内存管理arc
  9. quartus仿真17:T触发器的时序逻辑电路
  10. hibernate3连oracle的各种坑。。
  11. java jdk生成安卓app证书
  12. 机房(计算机室)管理制度,湖南石油化工职业技术学院-信息资源中心-管理制度-计算机机房管理制度...
  13. vue高德多条路线规划+带途径节点多组多个maker text标签创建+各路线颜色区别
  14. macbook pro怎么养小宠物?macbook pro养宠物设置方法
  15. Nature封面:基因突变才是衰老的罪魁祸首?体细胞突变越快,寿命越短
  16. Python正则表达式中的‘r‘
  17. html文档是哪个版本,HTML 简介, 版本和文档类型声明
  18. 7-158 判断4和7的倍数
  19. 男生可以把女生的裤袜当秋裤穿吗?
  20. LaTeX中定义新命令和环境

热门文章

  1. Graphic --- Android
  2. Telerik Kendo UI 那点事【2】中文化(汉化)
  3. 如何做好一个校园微信公众号,粉丝圈有话要说~
  4. 英文吵架必备100句
  5. 同一个电脑可安装多个python版本吗_一台电脑能否同时安装不同版本的Python?
  6. 幽幽雨儿情,滴滴母爱深
  7. 送5本新出版的算法书
  8. 年月日时分秒格式的转换为时间戳。
  9. FastReport 实现不预览直接打印的写法(FastReport4.6 和 FastReport2.4)
  10. Java堆——Tlab分析,介绍