bzoj_2561_最小生成樹_最小割
題意:給定乙個邊帶正權的連通無向圖g=(v,e),其中n=|v|,m=|e|,n個點從1到n依次編號,給定三個正整數u,v,和l (u≠v),假設現在加入一條邊權為l的邊(u,v),那麼需要刪掉最少多少條邊,才能夠使得這條邊既可能出現在最小生成樹上,也可能出現在最大生成樹上?
分析:如果所有邊中有能使u,v連通且權值比l小的,那新加的這條邊就不會出現在最小生成樹上,最大生成樹同理,那麼問題就轉化成求u,v之間的最小割,最小和最大分別做一次,相加即可。
注意無向圖連邊時容量。
**:
#include #include #include #include using namespace std;#define n 20020
#define m 400050
#define inf 100000000
struct a
e[m];
int s,t,ans;
int head[n],to[m],nxt[m],cnt=1,flow[m],n,m;
int dep[n];
void add(int u,int v,int f)
bool bfs()}}
return 0;
}int dfs(int x,int mf)
}dep[x]=0;
return nf;
}int dinic()
}return sum;
}int main()
scanf("%d%d%d",&s,&t,&z);
for(int i=1;i<=m;i++)
}printf("%d",ans+dinic());
}
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的邊建出...