Description

 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上?

Input

  第一行包含用空格隔开的两个整数,分别为N和M;
  接下来M行,每行包含三个正整数u,v和w表示图G存在一条边权为w的边(u,v)。
  最后一行包含用空格隔开的三个整数,分别为u,v,和 L;
  数据保证图中没有自环。

Output

 输出一行一个整数表示最少需要删掉的边的数量。

Sample Input

3 2
3 2 1
1 2 3
1 2 2

Sample Output

1

HINT

对于20%的数据满足N ≤ 10,M ≤ 20,L ≤ 20;
  对于50%的数据满足N ≤ 300,M ≤ 3000,L ≤ 200;
  对于100%的数据满足N ≤ 20000,M ≤ 200000,L ≤ 20000。

Source

2012国家集训队Round 1 day1

思路:首先白书中有这么一个命题:如果在图中存在一个环,使得一条边为环中的最大值,那么这条最大值的边显然不可能是MST中的边,于是猜测了一个相似的命题:如果不存在一个环使得这个边为最大值,那么一定存在一个MST使得这条边为MST中的边

然后仔细想想这个命题好像是有问题的,于是往kruscal方面考虑,如果将边排序了以后从小到大加,则加边过程中u到v显然不能联通,不然就得删边,在看了解题报告后证实了这个想法,于是对于一条边一定存在一个MST使得这条边为MST中的边的充要条件为比这条边小的边一定不能和这条边成环,于是结果就很显然了

#include <stdio.h>

#include <iostream>

#include<queue>

#include <string.h>

#include <algorithm>

#define maxn 1000005

#define maxm 1000005

#define inf 0x3f3f3f3f

int head[maxn],next[maxn],point[maxn],flow[maxn];

int ans=0,now=0,dist[maxn],que[maxn];

using namespace std;

struct T

{

int x;int y;int v;

}a[maxn];

inline bool operator <(T a,T b){return a.v<b.v;}

void add(int x,int y,int v)

{

next[++now]=head[x];

head[x]=now;

point[now]=y;

flow[now]=v;

next[++now]=head[y];

head[y]=now;

point[now]=x;

flow[now]=0;

}

int bfs(int s,int t)

{

memset(dist,-1,sizeof(dist));

dist[s]=0;

int l=0,r=0;

que[++r]=s;

while(l<r)

{

int u=que[++l];

for(int i=head[u];i;i=next[i])

{

if(dist[point[i]]==-1&&flow[i])

{

int k=point[i];

dist[k]=dist[u]+1;

que[++r]=k;

}

}

}

return dist[t]!=-1;

}

int dfs(int s,int d,int t)

{

if(s==t)return d;

int res=0;

for(int i=head[s];i&&res<d;i=next[i])

{

int u=point[i];

if(flow[i]>0 &&dist[u]==dist[s]+1)

{

int dd=dfs(u,min(d-res,flow[i]),t);

if(dd>0)

{

flow[i]-=dd;

flow[((i-1)^1)+1]+=dd;

res+=dd;

}

}

}

if(res==0)dist[s]=-1;

return res;

}

int main()

{

int n,m,s,t,l;

scanf("%d%d",&n,&m);

for(int i=1;i<=m;i++)scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].v);

scanf("%d%d%d",&s,&t,&l);

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

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

{

if(a[i].v>l)

{

add(a[i].x,a[i].y,1);

add(a[i].y,a[i].x,1);

}

}

while(bfs(s,t))

{

ans+=dfs(s,inf,t);

}

now=0;

memset(head,0,sizeof(head));

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

{

if(a[i].v<l)

{

add(a[i].x,a[i].y,1);

add(a[i].y,a[i].x,1);

}

}

while(bfs(s,t))

{

ans+=dfs(s,inf,t);

}

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

return 0;

}

BZOJ 2561: 最小生成树【最小割/最大流】的更多相关文章

  1. BZOJ 2561: 最小生成树(最小割)

    U,V能在最小(大)生成树上,当且仅当权值比它小(大)的边无法连通U,V. 两次最小割就OK了. --------------------------------------------------- ...

  2. BZOJ 2521 最小生成树(最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2521 题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里 思路:如果两个点中有环, ...

  3. hdu4289 最小割最大流 (拆点最大流)

    最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ...

  4. 【BZOJ-1797】Mincut 最小割 最大流 + Tarjan + 缩点

    1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1685  Solved: 724[Submit] ...

  5. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  6. hdu1569 方格取数(2) 最大点权独立集=总权和-最小点权覆盖集 (最小点权覆盖集=最小割=最大流)

    /** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge ...

  7. BZOJ1001:狼抓兔子(最小割最大流+vector模板)

    1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...

  8. HDU1565 方格取数(1) —— 状压DP or 插头DP(轮廓线更新) or 二分图点带权最大独立集(最小割最大流)

    题目链接:https://vjudge.net/problem/HDU-1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory L ...

  9. 最小割最大流定理&残量网络的性质

    最小割最大流定理的内容: 对于一个网络流图 $G=(V,E)$,其中有源点和汇点,那么下面三个条件是等价的: 流$f$是图$G$的最大流 残量网络$G_f$不存在增广路 对于$G$的某一个割$(S,T ...

  10. Destroying The Graph 最小点权集--最小割--最大流

    Destroying The Graph 构图思路: 1.将所有顶点v拆成两个点, v1,v2 2.源点S与v1连边,容量为 W- 3.v2与汇点连边,容量为 W+ 4.对图中原边( a, b ), ...

随机推荐

  1. ubuntu 16.0.4安装MySQL5.7

    系统版本 root@sishen:~# uname -a Linux sishen 4.10.0-35-generic #39~16.04.1-Ubuntu SMP Wed Sep 13 09:02: ...

  2. pscp多线程传输文件

    前面说过pscp不支持多线程,所以在此特地实现了一个 程序分三个部分: 1.初始化各种参数,涉及getopt函数的使用 2.重新定义scp,实现传递IP然后远程拷贝 3.启动多线程调用scp,涉及多线 ...

  3. php配置COM组件正常运行

    1. http://www.cnblogs.com/yuanke/p/4973824.html 在php.ini中 a. com.allow_dcom = true b. extension=php_ ...

  4. React.js 的 context

    这一节我们来介绍一个你可能永远用不上的 React.js 特性 —— context.但是了解它对于了解接下来要讲解的 React-redux 很有好处,所以大家可以简单了解一下它的概念和作用. 在过 ...

  5. jQuery在$(function(){})中調用函數

    任務太緊,很少記筆記,記下一篇jQuery中調用函數的例子: 該方法是在載入頁面的時候,判斷 ModelName 不為空,則獲取Model信息加載到Table中: 另外,在點擊半成品編號文本框時,也調 ...

  6. UVa OJ 494

     Kindergarten Counting Game  Everybody sit down in a circle. Ok. Listen to me carefully. ``Woooooo, ...

  7. sql格式化工具

    桌面版: SQLInform: http://www.sqlinform.com/download_free_desktop_sw.html 在线格式化: http://www.dpriver.com ...

  8. Android主题更换换肤

    知识总览android主题换肤通常借助LayoutInflater#setFactory实现换肤. 换肤步骤: 通过解析外部的apk压缩文件,创建自定义的Resource对象去访问apk压缩文件的资源 ...

  9. 油猴和EX-百度脚本 百度网盘下载

    pansoso.com 搜网盘 油猴和EX-百度脚本.zip https://aleikeji.pipipan.com/fs/845023-331102839

  10. 最短路 || POJ 2387 Til the Cows Come Home

    从点N到1的最短路 *记得无向图两个方向都要建边就好了…… 以及多组数据= = #include <iostream> #include <cstdio> #include & ...