POJ 1815 Friendship 最小割
来源:互联网 发布:两个域名指向一个主机 编辑:程序博客网 时间:2024/04/29 13:08
题意是输出一个字典序最小最小割方案。
我只能想到枚举每个点,不知道有没有更好的。。。
//#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>#include<cctype>#include<string>#include<algorithm>#include<iostream>#include<ctime>#include<map>#include<set>using namespace std;#define MP(x,y) make_pair((x),(y))#define PB(x) push_back(x)typedef long long LL;//typedef unsigned __int64 ULL;/* ****************** */const int INF=1000111222;const double INFF=1e100;const double eps=1e-8;const int mod=1000000007;const int NN=505;const int MM=401010;/* ****************** */struct G{ int v,cap,next;}E[NN*NN*8];int p[NN],T;int dd[NN],tp[NN],qw[NN];int re[NN],ans[NN];void add(int u,int v,int f){ E[T].v=v; E[T].cap=f; E[T].next=p[u]; p[u]=T++; E[T].v=u; E[T].cap=0; E[T].next=p[v]; p[v]=T++;}bool find_path(int st,int en,int n){ int i,u,v,head,tail; for(i=0;i<=n;i++) { dd[i]=-1; } dd[st]=0; qw[head=tail=0]=st; while(head<=tail) { u=qw[head++]; for(i=p[u];i+1;i=E[i].next) { v=E[i].v; if(dd[v]==-1 && E[i].cap>0) { dd[v]=dd[u]+1; qw[++tail]=v; } } } return (dd[en]!=-1);}int dfs_flow(int u,int &en,int f){ if(u==en || f==0) return f; int temp,flow=0; for( ; tp[u]+1 ; tp[u] = E[tp[u]].next ) { G &e=E[tp[u]]; if(dd[e.v]==dd[u]+1) { temp=dfs_flow(e.v,en,min(f,e.cap)); if(temp>0) { e.cap-=temp; E[tp[u]^1].cap+=temp; flow+=temp; f-=temp; if(f==0) break; } } } return flow;}int dinic(int st,int en,int n){ int i,ans=0; while( find_path(st,en,n) ) { for(i=0;i<=n;i++) tp[i]=p[i]; ans+=dfs_flow(st,en,INF); } return ans;}int main(){ int st,en,i,j,n; int pre,temp,t; int tol; bool fg; while(scanf("%d%d%d",&n,&st,&en)!=EOF) { fg=false; memset(p,-1,sizeof(p)); T=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d",&t); if(t==1) { add(i+n,j,1); if(i==st && j==en) { fg=true; } } } for(i=1;i<=n;i++) { re[i]=T; add(i,i+n,1); } if(fg) { puts("NO ANSWER!"); } else { st+=n; pre=dinic(st,en,n+n); tol=0; for(i=1;i<=n;i++) { if(E[re[i]].cap==0) { for(j=0;j<T;j+=2) { E[j].cap+=E[j^1].cap; E[j^1].cap=0; } temp=0; } else temp=pre; E[re[i]].cap=0; temp+=dinic(st,en,n+n); if(temp<pre) { pre=temp; ans[++tol]=i; if(pre==0) break; } else { E[re[i]].cap=1; } } printf("%d\n",tol); for(i=1;i<=tol;i++) printf("%d%c",ans[i],i==tol?'\n':' '); } } return 0;}
0 0
- poj 1815 Friendship //最小割
- POJ 1815 Friendship 最小割
- POJ 1815 Friendship(最小割)
- POJ 1815 Friendship 最小割
- POJ 1815 Friendship 最小割
- POJ 1815 Friendship | 最小割、最小点割集
- POJ 1815 Friendship (最小点割集/最小割)
- POJ 1815 Friendship(最小割)
- 【最小割+枚举】POJ-1815 Friendship
- POJ 1815 - Friendship(网络流‘最小割)
- POJ 1815 Friendship(最小割+拆点法)
- poj 1815 Friendship(最小割,求割集)
- POJ 1815 Friendship 最小割+字典序最小割集
- POJ 1815 Friendship 最小割 + 字典序输出割点
- poj 1815 Friendship 最小割输出最小方案
- poj 1815 Friendship (最小割 (贪心 最小割点集))
- POJ 1815 Friendship(字典序最小最小割)
- poj 1815 Friendship 求字典序最小的最小割
- vim 编辑 运行 shell 文件
- 反射实现JDBC封装
- 格雷戈里T.豪根的《有效的工作分解结构》免费阅读
- Android实战技巧:多线程AsyncTask(版本不同,有点差异)
- 加载rt3070sta.ko出现insmod: can't insert 'rt3070sta.ko': invalid module format问题
- POJ 1815 Friendship 最小割
- Android中OnkeyDown事件和OnBackPressed方法区别、兼容、使用
- Nginx学习(12)—核心结构(1)
- 学习计划
- 深入理解全局编录服务器GC
- redis 备份
- 存储过程
- CentOS 6下安装nodejs 0.9.0
- 最棒的10款MySQL管理工具