博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【网络流24题】最小路径覆盖问题
阅读量:6981 次
发布时间:2019-06-27

本文共 1955 字,大约阅读时间需要 6 分钟。

【题目】

【题解】

关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意。

mark记录有入度的右侧点,然后从没入度的右侧点开始把整条路径输出来即可。

#include
#include
#include
using namespace std;const int maxn=100000,inf=0x3f3f3f3f;int n,m,S,T,d[maxn],q[10010],first[maxn],tot=1,nex[maxn];bool mark[maxn];struct edge{
int from,v,flow;}e[maxn];void insert(int u,int v,int w){tot++;e[tot].v=v;e[tot].flow=w;e[tot].from=first[u];first[u]=tot; tot++;e[tot].v=u;e[tot].flow=0;e[tot].from=first[v];first[v]=tot;}bool bfs(){ memset(d,-1,4*(2*n+3)); int head=0,tail=1;q[0]=S;d[S]=0; while(head
10000)head=0; for(int i=first[x];i;i=e[i].from) if(e[i].flow&&d[e[i].v]==-1) { int y=e[i].v; d[y]=d[x]+1; q[tail++]=y;if(tail>10000)tail=0; } } return d[T]!=-1;}int dinic(int x,int a){// printf("x=%d a=%d\n",x,a); if(x==T||a==0)return a; int flow=0,f; for(int i=first[x];i;i=e[i].from) if(e[i].flow&&d[e[i].v]==d[x]+1&&(f=dinic(e[i].v,min(a,e[i].flow)))>0) { if(f>0) { nex[x]=e[i].v; if(e[i].v-n>0)mark[e[i].v-n]=1; } e[i].flow-=f; e[i^1].flow+=f; a-=f; flow+=f; if(a==0)break; } return flow;}int main(){ scanf("%d%d",&n,&m); S=0,T=2*n+1; for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); insert(u,v+n,1); } for(int i=1;i<=n;i++)insert(S,i,1); for(int i=n+1;i<=2*n;i++)insert(i,T,1); int ans=n; while(bfs())ans-=dinic(S,inf); for(int i=1;i<=n;i++)if(!mark[i]) { printf("%d ",i); int k=i; while(nex[k]) { printf("%d ",nex[k]-n); k=nex[k]-n; } printf("\n"); } printf("%d",ans); return 0;}
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/6713130.html

你可能感兴趣的文章
python3 集合中的常用方法
查看>>
ECSHOP生成缩略图模糊
查看>>
LayaAir疑难杂症之四:laya引擎自动断点到bundle.js文件中且无报错,但程序不再执行...
查看>>
元组操作
查看>>
Delphi判断字符串是否是数字、字母、大小写字母
查看>>
POJ NOI0105-45 金币
查看>>
Project Euler Problem 15 Lattice paths
查看>>
组合模式
查看>>
Python之路番外(第三篇):Pycharm的使用秘籍
查看>>
alpha冲刺9
查看>>
转:目标检测算法总结
查看>>
C#获取文件的MD5值
查看>>
字符串子串查找strstr
查看>>
个人Vue-1.0学习笔记
查看>>
string的属性小试
查看>>
JS中3种弹出窗口函数区别分析
查看>>
《深入理解计算机系统》 优化程序性能的几个方法
查看>>
WPF项目中使用水晶报表for vs2010时的一个找不到程序集的问题
查看>>
关于C/C++的一些思考(2)
查看>>
hive计算周一的日期
查看>>