time limit: 10 sec
memory limit: 128 mb
submit: 1724
solved: 829 [
submit][
status][
discuss]
給定乙個邊帶正權的連通無向圖g=(v,e),其中n=|v|,m=|e|,n個點從1到n依次編號,給定三個正整數u,v,和l (u≠v),假設現在加入一條邊權為l的邊(u,v),那麼需要刪掉最少多少條邊,才能夠使得這條邊既可能出現在最小生成樹上,也可能出現在最大生成樹上?
第一行包含用空格隔開的兩個整數,分別為n和m;
接下來m行,每行包含三個正整數u,v和w表示圖g存在一條邊權為w的邊(u,v)。
最後一行包含用空格隔開的三個整數,分別為u,v,和 l;
資料保證圖中沒有自環。
輸出一行乙個整數表示最少需要刪掉的邊的數量。
3 23 2 1
1 2 3
1 2 2
1對於20%的資料滿足n ≤ 10,m ≤ 20,l ≤ 20;
對於50%的資料滿足n ≤ 300,m ≤ 3000,l ≤ 200;
對於100%的資料滿足n ≤ 20000,m ≤ 200000,l ≤ 20000。
2012國家集訓隊round 1 day1 [
submit][
status][
discuss]
參考bzoj2521的建圖。。。bzoj2521
邊集要開四倍。。。。一開始只開了兩倍。。。結果wa不止。。。
#include#include#include#include#includeusing namespace std;
const int maxn = 2e4 + 20;
const int maxm = 8e5 + 80;
const int inf = 1e9 + 233;
struct e
e(int to,int cap,int flow): to(to),cap(cap),flow(flow){}
}edgs[maxm];
int n,m,cnt,s,t,a[maxm],b[maxm],w[maxm],cur[maxn],l[maxn];
vector v[maxn];
queue q;
void add(int x,int y,int cap)
bool bfs()
}return l[t];}
int dinic(int x,int a)
if (!flow) l[x] = -1; return flow;}
int maxflow()
return ret;}
int getint()
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的邊建出...