題目大意;題目鏈結。
注釋:略。
想法:我們發現:
如果一條權值為$l$的邊想加入到最小生成樹上的話,需要滿足一下條件。
就是求出原圖的最小生成樹之後,這個邊當做非樹邊的情況下覆蓋的邊的最小值不可以比$l$小。
如此,我們級就可以通過網路流來求了。
對於每一條比$l$小的邊,我們連雙向邊,求當前邊$u,v$的最小割即可。
如果是最大生成樹的話同理,我們只需要把所有比當前加入的邊的權值小的邊在網路流中連無向邊,然後跑最小割即可。
code:
#include #include #include #include #include #define n 200100#define m 2000100
using namespace std;
int to[m<<1],head[n],nxt[m<<1],val[m<<1],dis[n],tot=1,s,t;
queueq;
struct node e[m]; inline bool cmp_w(const node &a,const node &b)
inline void add(int x,int y,int z)
bool bfs()
} return false;
}int dinic(int x,int fl)
return fl-tmp;
}int main()
小結:好玩吧。
bzoj 2561 最小生成樹
給定乙個邊帶正權的連通無向圖g v,e 其中n v m e n個點從1到n依次編號,給定三個正整數u,v,和l u v 假設現在加入一條邊權為l的邊 u,v 那麼需要刪掉最少多少條邊,才能夠使得這條邊既可能出現在最小生成樹上,也可能出現在最大生成樹上?第一行包含用空格隔開的兩個整數,分別為n和m 接...
bzoj2561 最小生成樹
time limit 10 sec memory limit 128 mb submit 1024 solved 520 submit status discuss 給定乙個邊帶正權的連通無向圖g v,e 其中n v m e n個點從1到n依次編號,給定三個正整數u,v,和l u v 假設現在加入一...
bzoj 2561 最小生成樹
給定乙個邊帶正權的連通無向圖,現在加入一條邊權為l的邊 u,v 那麼需要刪掉最少多少條邊,才能夠使得這條邊既可能出現在最小生成樹上,也可能出現在最大生成樹上?以前看著一臉懵逼,現在好像就是那樣。容易想到,當u v存在一條路徑,上面不存在 l的邊,那麼新邊一定不在最小生成樹上,所以將所有小於l的邊建出...