題目大意是,給定n個頂點,m條邊,兩個頂點之間可能有多條邊,求至少刪除多少條邊才能將該圖分成兩個子圖。
最小割集,典型的演算法stoer-wagner,就是那篇**,這裡也就不複製過來了,只是用prim求最大生成樹時,更新的「邊」不是普通意義上的邊,而是頂點到所有已劃分集合中的所有點的邊權值和,這裡要特別注意~ 直接貼**~
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
int g[501][501];
bool visited[501];
int d[501];
int edge[501];
int main()
int minans = 1000000000;
int s = 0;
int v = -1;
edge[0] = 0;
for (int c = 0; c < n - 1;c++)
if (!visited[i] && d[i] > minedge)
}if (v == -1)
edge[v] = s;
s = v;
visited[s] = true;
}int total = 0;
for (int i = 0; i < n; i++)
if (total < minans)
g[s][edge[s]] = 0;
g[edge[s]][s] = 0;
for (int i = 0; i < n; i++)
}printf("%d\n", minans);
} return 0;
}
poj 1815(最小割 割集)
思路 題目要求是剔除多少個點,可以將其轉化為剔除多少條邊,因此需要拆點,將點i拆成i,i n,便容量為1,表示每個人起的傳遞作用只能是一次。然後就是列舉了,刪除某條邊,如果求出的最小割比原來的要小,說明減少的是割邊集。1 include2 include3 include4 include5 inc...
poj 3204 最小割(關鍵割邊)
題意 給出有n 個節點的網路,和m條單向邊,知道了每條邊的容量,問哪些邊滿足增加該邊的容量後,能使得從起點到終點的總流量增加 只能修改一條邊!注意一點,在一條流路中只能修改一條,好像s 1 2 t,假設每條邊的容量都是2,那麼最大流的流路只有一條,但是這條流路中,要想增大一條邊的容量而使整個網路的最...
poj 1815 最小割 列舉
題意 給乙個無向圖,求最少刪除多少個點,使得從s到t不連通,並輸出字典序最小的方案數。思路 拆點,從s到t跑一遍最小割,求出最少刪除的點數。關鍵是如何求字典序最小的方案,可以從1到n列舉每個點 拆成的邊 是否可以在最小割中,即把這個點所連的所有邊斷掉,再跑一遍最小割。如果最小割減小,就把這個點從割集...