BZOJ_2561_最小生成树_最小割
2024-08-26 05:58:53
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());
}
最新文章
- AutoMapper使用中的问题
- iOS-私有API与runtime
- javascript在html中的加载顺序
- 常用SQL Server日期格式化
- 软件工程个人作业-Week2
- 进程间通信IPC:消息队列,信号量,共享内存
- Android判断当前线程是否是主线程的方法
- 流媒体一些server
- 017Makefile工程管理
- UI表单
- 扩展PHP内置的异常处理类
- php数组和正则表达式的替换拆分匹配所有
- 超越村后端开发(3:安装djangorestframework+序列化+API开发前期准备)
- 2019春第五周作业Compile Summarize
- AI制作icon标准参考线与多面板复制
- 利用channel在goroutins之间控制同步和传递数据
- 使用block的时候,导致的内存泄漏
- python基础(9)-迭代器&;生成器函数&;生成器进阶&;推导式
- 一个不错的PHP二维数组排序函数简单易用存用
- HTML/CSS学习(二)
热门文章
- 如何通过jQuery获取一个没有定高度的元素---------的自适应高度(offsetHeight的正确使用方法)
- Windows上模拟Linux环境的软件Cygwin
- Google揭开Mesa的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库
- Ruby中如何复制对象 (deep clone)(转载)
- UML小白入门基础教程
- Vue作者尤雨溪:以匠人的态度不断打磨完善Vue (图灵访谈)
- 《T-SQL查询》读书笔记Part 2.执行计划
- arcEngine开发之根据点坐标创建Shp图层
- vue项目中解决type=”file“ change事件只执行一次的问题
- Net Core动态加载webservice/WCF