如果出现在最小生成树上,那么此时比该边权值小的边无法连通uv。据此跑最小割(最大流)即可。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){int x=0;char c=getchar();bool f=true;while(!isdigit(c)) {if(c=='-') f=false;c=getchar();}while(isdigit(c)) x=x*10+c-'0',c=getchar();return f?x:-x;
}
const int nmax=20005;
const int maxn=200005;
const int inf=0x7f7f7f7f;
struct Edge{int from,to,cap;bool operator<(const Edge&rhs)const{return cap<rhs.cap;}
};
Edge Edges[maxn];
struct edge{int to,cap;edge *next,*rev;
};
edge edges[maxn<<2],*pt,*head[nmax],*p[nmax],*cur[nmax];
void add(int u,int v,int d){pt->to=v;pt->cap=d;pt->next=head[u];head[u]=pt++;
}
void adde(int u,int v,int d){add(u,v,d);add(v,u,0);head[u]->rev=head[v];head[v]->rev=head[u];
}
int cnt[nmax],h[nmax];
int maxflow(int s,int t,int n){clr(cnt,0);clr(h,0);cnt[0]=n;int flow=0,a=inf,x=s;edge *e;while(h[s]<n){for(e=cur[x];e;e=e->next) if(e->cap>0&&h[e->to]+1==h[x]) break;if(e){p[e->to]=cur[x]=e;a=min(a,e->cap);x=e->to;if(x==t){while(x!=s) p[x]->rev->cap+=a,p[x]->cap-=a,x=p[x]->rev->to;flow+=a,a=inf;}}else{if(!--cnt[h[x]]) break;h[x]=n;for(e=head[x];e;e=e->next) if(e->cap>0&&h[e->to]+1<h[x]) h[x]=h[e->to]+1,cur[x]=e;cnt[h[x]]++;if(x!=s) x=p[x]->rev->to;}}return flow;
}
int main(){int n=read(),m=read(),s,t,d;rep(i,m) Edges[i].from=read(),Edges[i].to=read(),Edges[i].cap=read();s=read(),t=read(),d=read();sort(Edges+1,Edges+m+1);
//  rep(i,m) printf("%d %d %d\n",Edges[i].from,Edges[i].to,Edges[i].cap);pt=edges;clr(head,0);rep(i,m){if(Edges[i].cap>=d) break;Edge&o=Edges[i];adde(o.from,o.to,1);adde(o.to,o.from,1);}int ans=maxflow(s,t,n);pt=edges;clr(head,0);for(int i=m;i;i--){if(Edges[i].cap<=d) break;Edge&o=Edges[i];adde(o.from,o.to,1);adde(o.to,o.from,1);}ans+=maxflow(s,t,n);printf("%d\n",ans);return 0;
}

 

2561: 最小生成树

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1459  Solved: 716
[Submit][Status][Discuss]

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

[Submit][Status][Discuss]

转载于:https://www.cnblogs.com/fighting-to-the-end/p/5657280.html

bzoj2561: 最小生成树相关推荐

  1. BZOJ2561最小生成树——最小割

    题目描述 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最 ...

  2. bzoj2561 最小生成树

    题意:给你无向图,给定一条边,求至少在原图中删去多少边才能使它同时在某个最大生成树和某个最小生成树中. 解: 假装我们把边排序了,然后把所有边权小于给定边的边都加进去了. 那么我们要删的就是s到t的一 ...

  3. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  4. [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

    L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...

  5. 图的算法专题——最小生成树

    概要: Prim算法 Kruskal算法 1.Prim算法 算法流程: (1)对图G(V,E)设置集合S来存放已被并入的顶点,然后执行n次(2)(3) (2)每次从未并入顶点集合中选择与集合S最近的一 ...

  6. 【BZOJ1016】【Luogu P4208】 [JSOI2008]最小生成树计数 最小生成树,矩阵树定理

    蛮不错的一道题,遗憾就遗憾在数据范围会导致暴力轻松跑过. 最小生成树的两个性质: 不同的最小生成树,相同权值使用的边数一定相同. 不同的最小生成树,将其都去掉同一个权值的所有边,其连通性一致. 这样我 ...

  7. Educational Codeforces Round 9 F. Magic Matrix 最小生成树

    F. Magic Matrix 题目连接: http://www.codeforces.com/contest/632/problem/F Description You're given a mat ...

  8. [vijos1234]口袋的天空最小生成树

    题目链接:https://vijos.org/p/1234 白天刚刚写完prim的算法,晚上就心血来潮的打了一道最小生成树的题 虽然有题解说可以用prim做,但是这道题明显是加最小的边,感觉krusk ...

  9. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)

    P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...

最新文章

  1. 数据结构之【数组和广义表】复习题
  2. 关于win7的64位和32位有什么不同性价比怎么比
  3. 局部变量、全局变量、堆、堆栈、静态和全局
  4. Redmine性能测试
  5. you just 飞鸽传书2007绿色版 ever day for two years
  6. mdx格式的词典用什么软件打开_可能是目前PC端最好用的词典——Goldendict
  7. 10.15 sigstjmp以及siglongjmp函数
  8. 什么软件测试内存稳定性,喜大普奔:内存稳定性工具Memtest终有Windows版
  9. SEAIR传染病模型及其开源代码
  10. 微信小程序添加激励式广告
  11. 3G中的A-GPS移动定位技术
  12. Spring复习——B站
  13. js破解 X笔网登录
  14. python提取excel表格数据
  15. 一次Log4j2日志输出阻塞问题的定位
  16. 带你看数据挖掘与机器学习-厦大EDP上课出勤预测
  17. 洛咕 P2465 [SDOI2008]山贼集团
  18. 怎么使用迅捷文字转语音软件转换文字
  19. SCI:SCI论文写作技巧的详细攻略
  20. 全套学习!系统学Android从零开始,详细的Android学习指南

热门文章

  1. softmax简单模型处理Mnist分类问题
  2. Kali-linux安装之后的简单设置
  3. sdk编程改变static控件字体和颜色
  4. 犯了一个连接数据库的低级错误
  5. Redis 总结精讲 看一篇成高手系统 四
  6. android 判断byte值_Android开发之UDP可靠性传输
  7. Perl之 用Net::FTP来上传下载文件
  8. `constexpr`和`const`之间的区别?
  9. Leetcode题库 762.二进制表示中质数个计算置位(哈希数组 C实现)
  10. [Jarvis OJ - PWN]——[XMAN]level2(x64)