uva10480最小割集

2022-03-16 01:34:06 字數 1271 閱讀 3946

求最小割集

dinic處理後用dfs對所有點進行標記,遍歷整個聯接邊,起點訪問了,終點沒訪問或者起點沒訪問,終點訪問了就是最小割集之一

#include#include

#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;

}

view code

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...