无向图最小割集
//HDU 3002
int dis[N][N],del[N];
int ww[N],vis[N];
int S,T,n;
int _search(){
memset(vis,0,sizeof(vis));
memset(ww,0,sizeof(ww));
S=T=-1;
int ans=0;
while(1){
int tmp=-1,mx=-INF;
for(int j=0;j<n;j++){
if(!del[j]&&!vis[j]&&ww[j]>mx){
tmp=j;mx=ww[j];
}
}
if(tmp==-1)break;
S=T;T=tmp;
ans=mx;
vis[tmp]=1;
for(int j=0;j<n;j++){
if(!del[j]&&!vis[j]){
ww[j]+=dis[tmp][j];
}
}
}
return ans;
}
int _sw(){
memset(del,0,sizeof(del));
int ans=INF;
for(int i=0;i<n-1;i++){
ans=min(ans,_search());
if(ans==0)return ans;
del[T]=1;
for(int j=0;j<n;j++){
if(!del[j]){
dis[S][j]+=dis[T][j];
dis[j][S]+=dis[j][T];
}
}
}
return ans;
}