这题还是挺好的、就是有一点绕

一开始只想到要删去选定边两个顶点相连的边,然后再if删除,但这样是错误的

其实一个边在不在最小生成树里就只要看有没有一条路径能全走比他小的边,使得这条边的两个点联通就好了

因为如果有一条路径中出现了比他小的边,,那这个边就可以选,当前边就可以断开,至少会比使用当前边会小

或者从kruskal算法的原理,如果比他小的边联通了这两个点,那这个边一定不会被选到

最大生成树同理,,

所以就相当于断掉最少的边,使u到v没有一条除选定边以外的路径

最 小 割

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define inf 1000000007
#define N 800005
queue<int>q;
int tot=-1,n,m,dis[N],hou[N],xia[N],zhi[N],zhong[N],x,y,z,daan,yuan[N],s,t,a[N],b[N],c[N],l;
void jian(int x,int y,int z)
{++tot,hou[tot]=yuan[x],yuan[x]=tot,zhi[tot]=z,zhong[tot]=y;
}
void jia(int x,int y,int z)
{jian(x,y,z);jian(y,x,z);
}
bool bfs(int s,int t)
{for(int i=1;i<=n;i++){dis[i]=1000000009;   xia[i]=yuan[i];}dis[s]=0;q.push(s);
while(!q.empty())   {int st=q.front();q.pop();for(int i=xia[st];i!=-1;i=hou[i]){int nd=zhong[i];if(dis[nd]>inf&&zhi[i]>0){dis[nd]=dis[st]+1;q.push(nd);                }       }}return dis[t]<inf;
}
int dfs(int o,int t,int limit)
{if(limit==0||t==o)return limit;int f=0,i,nd,flow=0;for(i=xia[o];i!=-1;i=hou[i]){xia[o]=i;nd=zhong[i];if(dis[nd]==dis[o]+1&&(f=dfs(nd,t,min(zhi[i],limit)))){limit-=f;flow+=f;zhi[i]-=f;zhi[i^1]+=f;if(limit==0)break;   }   }return flow;
}
int dinic(int s,int t)
{int ans=0;while(bfs(s,t)){ans+=dfs(s,t,inf);}return ans;
}
int main()
{int i;scanf("%d%d",&n,&m);for(i=1;i<=m;i++){scanf("%d%d%d",&a[i],&b[i],&c[i]);  }scanf("%d%d%d",&s,&t,&l);memset(yuan,-1,sizeof(yuan));tot=-1;for(i=1;i<=m;i++){if(c[i]<l)jia(a[i],b[i],1);    }daan+=dinic(s,t);memset(yuan,-1,sizeof(yuan));tot=-1;for(i=1;i<=m;i++){if(c[i]>l)jia(a[i],b[i],1);    }daan+=dinic(s,t);printf("%d",daan);
}

2017.9.1 最小生成树 失败总结相关推荐

  1. 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术

    来源:科技周 摘要:2018 年伊始,许多科技大势仍在继续,正如比尔·盖茨所说,"大多数人高估了某种技术的短期价值,低估了其长期价值."同样,大多数的年度预测会高估了一年内一些事件 ...

  2. 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决

    找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问 ...

  3. 2017.3.6 种树 失败总结

    一看这题--难道不是 n^2 dp?   怎么可能不是n^2dp? n=200000 怎么搞... 总之要想尽一切方法搞出来.. 想到了网络流,但这个m是至多而不是定值. 想到了最短路,但没法确定m ...

  4. 【离散数学】最小生成树失败普罗米

    #include<iostream> #include<vector> using namespace std;void showtree(int tree[], int n) ...

  5. 2017.10.18 开店 失败总结

    噩梦+级别的题,最近的题又难想又难调,还都是第一次打 以前做过和这个题很像的题,,但并没有想到. 注意前缀和的应用,似乎很多题都想不到用前缀和化成点. 然后就是套路:每个点到一个点的距离==每个点到根 ...

  6. 2017.10.13 轮状病毒 失败总结

    这个题可以用矩阵树定理,构造基尔霍夫矩阵,然后直接求行列式.. 但这样做会被卡精度,所以需要考虑有没有递推的做法 首先想按联通块个数来分状态,但除个数外,还有每个联通块的大小也会影响答案, 所以这是不 ...

  7. 2017.10.11 灾难 失败总结

    想了一上午没有结果,主要是因为原图搜索性太强,,就是每个点的影响虽然是固定的,但决策是需要遍历的.. 所以不能抽象成数字拓扑思考,不然同样的影响会被访问多次,却因为目标点的状态不同  而无法继续化简 ...

  8. 2017.9.29 road 失败总结

    首先要明确:多源最短路不只有floyd,还有n遍单源最短路 而且有时比floyd快. 所以可以用n遍spfa求所有点的单源最短路 期望复杂度n*(n*2) 然后对于每个单源最短路,求出经过每条边的次数 ...

  9. 2017.9.28 lca 失败总结

    序号连续,,体现在树上一点关系都没有..所以这一条性质用不上就只能暴力了 所以就需要考虑序号连续有什么用. 首先所求的是一个区间所以就可以用前缀和化成两个点←重要套路 然后求lca往上的距离就可以每个 ...

最新文章

  1. python nums函数_Python函数
  2. SPOJ ATOMS - Atoms in the Lab
  3. linux监控目录变动
  4. php 跳转网页 变量,php变量与JS变量实现不通过跳转直接交互的方法
  5. eclipse没有日志_「开源资讯」Jboot v3.3.6 发布,更强大的控制台请求日志
  6. [vue] 什么是双向绑定?原理是什么?
  7. 让敏捷交付优秀的软件
  8. 物联网|ZETA技术助力远超抄表实现智能化、精细化
  9. 河南省第八届ACM程序设计竞赛(未完再续)
  10. 沉没成本谬误(一):你是如何被“套牢”的?(二):吃饱撑着也要把东西吃完
  11. 编程猫海龟编辑器 附使用教程
  12. 在vs中怎样一次性的添加一个文件夹到解决方案里
  13. 负压式爬壁机器人_负压吸附式爬壁机器人的体重设计
  14. 计算机中丢失Smtpemail,SMTP和ESMTP错误代码列表
  15. 【Java】基础知识-JAXP解析XML(一)
  16. mt店铺榜+餐饮分类
  17. 软件工程——软件设计总结
  18. python pandas stack_10分钟上手 Python pandas
  19. 睡眠多少分钟一个循环_快速眼动周期-睡眠循环
  20. Linux的PS修改名称,ps命令的10个例子

热门文章

  1. 使用sublime的SQLTools插件访问MySQL的配置方法
  2. C++ Primer Plus第二章课后编程答案
  3. Node编码格式的设置
  4. 例子---年倒计时/JS日期对象类型
  5. 判断学生成绩(保证其在0-100)c语言
  6. springboot 集成mybatis_Spring Boot 集成Mybatis实现多数据源
  7. android权限机制6.0,Android6.0权限机制(二):封装
  8. 有小数点是什么类型_「JAVA零基础入门系列」Day3 Java基本数据类型
  9. CentOS8如何修改系统日志的时间戳格式(rsyslog8版本)
  10. gson java 对象_Gson把json串转换成java实体对象