求最小割集
dinic處理後用dfs對所有點進行標記,遍歷整個聯接邊,起點訪問了,終點沒訪問或者起點沒訪問,終點訪問了就是最小割集之一
#include#includeview code#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define pi acos(-1)
#define ll long long
#define mod 100000000
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define min(a,b) ausing
namespace
std;
const
double g=10.0,eps=1e-9
;const
int n=10000+10,maxn=500+10,inf=40000000
;struct
edgee[n];
intdis[maxn],head[maxn];
bool
vis[maxn],mp[maxn][maxn];
intcnt,s,t;
void add(int u,int v,int
c)bool
bfs()}}
return dis[t]>-1;}
int dfs(int x,int
mx) }
dis[x]=-2
;
return0;
}int
max_flow()
//cout
flow;
}void
bfs()}}
}int
main()
s=1,t=2
; max_flow();
bfs();
memset(mp,
0,sizeof
mp);
for(int i=0;i)
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(mp[i][j])
cout
"cout
<
}return0;
}
uva10480 最大流最小割定理
題意 求最小割的邊。方法 跑最大流,最後跑完後,s t割,將與源點相連的點分到乙個集合,與匯點相連的點分到另乙個集合。如果邊的兩個點分別在不同的集合中,那麼這個就是最小割上的邊。include include include include include include include using...
網路流強化 UVA10480
做這道題,自己先是想了好幾種找被割的邊的方法 都被否決了。後來發現是最小割 只要一條邊的兩端在不同的點集裡面就代表是被割掉的滿流邊 這些滿流邊的流量和等於最大流的流量與最小割的權值和 但是之前自己想了乙個例子,10111 4343 3323 45 10056 1006 710072 1001 810...
poj 1815(最小割 割集)
思路 題目要求是剔除多少個點,可以將其轉化為剔除多少條邊,因此需要拆點,將點i拆成i,i n,便容量為1,表示每個人起的傳遞作用只能是一次。然後就是列舉了,刪除某條邊,如果求出的最小割比原來的要小,說明減少的是割邊集。1 include2 include3 include4 include5 inc...