題意:給乙個圖(有自迴路,重邊),要去掉所有邊,規則:對某個點,可以有2種操作:去掉進入該點
的所有邊,也可以去掉出該點所有邊,(第一種代價為w+,第二種代價為w-)。求最小代價去除所有邊。
己思:點的權被分為出入?必然拆點啊!每個點一分為二,點權:出的為出點權,入的為入點權,原來邊仍在
,注意,這裡(1-)->(1+),不多新增邊,因為相當於求新圖的最小點權覆蓋集(覆蓋所有邊,每選乙個點
恰好去除了它的邊(要原圖的入邊或出邊),),所以不可以在新圖上再新增邊(這裡不是到不到的問題了)
,若新增邊i-->i+,最小割可能發生變化。所以求二分圖最小割問題,=新添s,t的最大流。
這題要輸出方案,即最小點權覆蓋集的點,即最小割(該二分圖為簡單割),遍歷邊,若該邊倆頭
vis值(dinic後)不同,(i%2==0)必然為最小割邊。
ps:神題??
#include//110ms ,1a
#include#include#includeusing namespace std;
int n,m; int e[30000][3];int head[208];int nume=0;
const int inf=0x3f3f3f3f;
void addedge(int f,int l,int w)
int vis[205];int level[205];
bool bfs()}}
return vis[n*2+1];
}int dfs(int u,int minf)
}printf("%d\n",count);
for(int i=0;i
poj 2125 最小點權覆蓋
題意描述 給你一張有向圖,每個點有兩個權值 w w w 表示刪掉該點的所有入邊所需要的花費,w 表示刪掉該點的所有出邊所需要的花費,問要刪除所有的點需要的最少花費為多少?分析 因為涉及到了點權和所有的邊那麼很容易想到最小點權覆蓋,但是這裡每個點有兩個權值怎麼處理呢?這樣建圖 將點拆成兩個點,每個點對...
POJ 2125 網路流拆點最小點權覆蓋
destroying the graph poj 2125 目前想法是拆點加最小點權覆蓋 這道題的特殊點在於他還要尋找最小點權覆蓋選擇的是 1 n取s能遍歷到的點,n 1 2 n取s遍歷不到的點 那個求割點的重點在於一定要用visit,別用vis,重名了 題意就是 有乙個圖,兩種操作,一種是刪除某點...
poj 3308 最小點權覆蓋 最小割
思路 裸的最小點權覆蓋,建立超級源點和超級匯點,將源點與行相連,容量為這行消滅敵人的代價,將列與匯點相連,容量為這列消滅敵人的代價,對於每乙個敵人 x,y 連邊x y,容量為inf,這樣就說明選取的點覆蓋了那些邊 敵人 然後跑最大流求最小割即可。ps 這裡是乘積最小,要取對數轉化為和最小。1 inc...