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 <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define N 20020
#define M 400050
#define inf 100000000
struct A
{
int a,b,v;
}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)
{
to[++cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt;
flow[cnt]=f;
}
bool bfs()
{
queue <int> q;
memset(dep,0,sizeof(dep));
dep[S]=1;q.push(S);
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=nxt[i])
{
if(!dep[to[i]]&&flow[i])
{
dep[to[i]]=dep[x]+1;
if(to[i]==T)return 1;
q.push(to[i]);
}
}
}
return 0;
}
int dfs(int x,int mf)
{
if(x==T)return mf;
int nf=0;
for(int i=head[x];i;i=nxt[i])
{
if(dep[to[i]]==dep[x]+1&&flow[i])
{
int tmp=dfs(to[i],min(flow[i],mf-nf));
nf+=tmp;
flow[i]-=tmp;
flow[i^1]+=tmp;
if(nf==mf)break;
}
}
dep[x]=0;
return nf;
}
int dinic()
{
int f,sum=0;
while(bfs())
{
while(f=dfs(S,inf))
{
sum+=f;
}
}
return sum;
}
int main()
{
scanf("%d%d",&n,&m);
int x,y,z;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].v);
}
scanf("%d%d%d",&S,&T,&z);
for(int i=1;i<=m;i++)
{
if(e[i].v<z)
{
add(e[i].a,e[i].b,1);
add(e[i].b,e[i].a,1);
}
}
ans+=dinic();
memset(head,0,sizeof(head));
cnt=1;
for(int i=1;i<=m;i++)
{
if(e[i].v>z)
{
add(e[i].a,e[i].b,1);
add(e[i].b,e[i].a,1);
}
}
printf("%d",ans+dinic());
}

最新文章

  1. AutoMapper使用中的问题
  2. iOS-私有API与runtime
  3. javascript在html中的加载顺序
  4. 常用SQL Server日期格式化
  5. 软件工程个人作业-Week2
  6. 进程间通信IPC:消息队列,信号量,共享内存
  7. Android判断当前线程是否是主线程的方法
  8. 流媒体一些server
  9. 017Makefile工程管理
  10. UI表单
  11. 扩展PHP内置的异常处理类
  12. php数组和正则表达式的替换拆分匹配所有
  13. 超越村后端开发(3:安装djangorestframework+序列化+API开发前期准备)
  14. 2019春第五周作业Compile Summarize
  15. AI制作icon标准参考线与多面板复制
  16. 利用channel在goroutins之间控制同步和传递数据
  17. 使用block的时候,导致的内存泄漏
  18. python基础(9)-迭代器&amp;生成器函数&amp;生成器进阶&amp;推导式
  19. 一个不错的PHP二维数组排序函数简单易用存用
  20. HTML/CSS学习(二)

热门文章

  1. 如何通过jQuery获取一个没有定高度的元素---------的自适应高度(offsetHeight的正确使用方法)
  2. Windows上模拟Linux环境的软件Cygwin
  3. Google揭开Mesa的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库
  4. Ruby中如何复制对象 (deep clone)(转载)
  5. UML小白入门基础教程
  6. Vue作者尤雨溪:以匠人的态度不断打磨完善Vue (图灵访谈)
  7. 《T-SQL查询》读书笔记Part 2.执行计划
  8. arcEngine开发之根据点坐标创建Shp图层
  9. vue项目中解决type=”file“ change事件只执行一次的问题
  10. Net Core动态加载webservice/WCF