BZOJ2561 最小生成樹 最小割

2022-03-29 03:37:44 字數 997 閱讀 2414

給定乙個邊帶正權的連通無向圖g=(v,e),其中n=|v|,m=|e|,n個點從1到n依次編號,給定三個正整數u,v,和l (u≠v),假設現在加入一條邊權為l的邊(u,v),那麼需要刪掉最少多少條邊,才能夠使得這條邊既可能出現在最小生成樹上,也可能出現在最大生成樹上?n ≤ 20000,m ≤ 200000,l ≤ 20000

考慮kruskal演算法的過程,一條邊\((u,v,w)\)能被加入最小生成樹,當且僅當加入所有權值\(的邊之後,\(u\)和\(v\)不連通。

那麼問題轉化成刪除最小的邊,使得\(u,v\)不連通.直接建邊權為1的邊跑最小割即可,注意一條無向邊要拆成兩條。

最大生成樹同理,對\(>w\)的邊操作即可,最後把兩個答案累加起來。

#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define maxn 20000

#define maxm 200000

using namespace std;

int n,m;

int u,v,w;

struct _edge

int deep[maxn+5];

bool bfs(int s,int t)}}

return 0;

}int dfs(int x,int t,int minf)

}return minf-rest;

}int dinic(int s,int t)

return ans;

}void clear()

}int main()

scanf("%d %d %d",&u,&v,&w);

sort(g+1,g+1+m);

int ans=0;

for(int i=1;i<=m;i++)

}ans+=dinic::dinic(u,v);

printf("%d\n",ans);

}

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的邊建出...