BZOJ 2521 最小生成树(最小割)
2016-06-13 17:22
225 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=2521
题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里
思路:如果两个点中有环,那么这条边必须不能是环的最大边,这样子把之前所有的边权值变成V+1-v[i],无向图网络流就可以了
题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里
思路:如果两个点中有环,那么这条边必须不能是环的最大边,这样子把之前所有的边权值变成V+1-v[i],无向图网络流就可以了
#include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #define inf 0x7fffffff struct edge{ int u,v,w; }e[200005]; int n,m,id,dis[200005],cnt[200005],tot,S,T,nodes; int flow[200005],op[200005],next[200005],first[200005],go[200005]; int read(){ char ch=getchar();int t=0,f=1; while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();} return t*f; } void insert(int x,int y,int z){ tot++; go[tot]=y; next[tot]=first[x]; first[x]=tot; flow[tot]=z; } void add(int x,int y,int z){ insert(x,y,z);op[tot]=tot+1; insert(y,x,0);op[tot]=tot-1; } void add2(int x,int y,int z){ insert(x,y,z);op[tot]=tot+1; insert(y,x,z);op[tot]=tot-1; } int dfs(int x,int f){ if (x==T) return f; int mn=nodes,sum=0; for (int i=first[x];i;i=next[i]){ int pur=go[i]; if (flow[i]&&dis[pur]+1==dis[x]){ int save=dfs(pur,std::min(f-sum,flow[i])); sum+=save; flow[i]-=save; flow[op[i]]+=save; if (sum==f||dis[S]>=nodes) return sum; } if (flow[i]) mn=std::min(mn,dis[pur]); } if (sum==0){ cnt[dis[x]]--; if (cnt[dis[x]]==0){ dis[S]=nodes; }else{ dis[x]=mn+1; cnt[dis[x]]++; } } return sum; } int main(){ n=read();m=read();id=read(); S=0,T=n+1;nodes=n+2; for (int i=1;i<=m;i++){ e[i].u=read();e[i].v=read();e[i].w=read(); } add(S,e[id].u,inf); add(e[id].v,T,inf); for (int i=1;i<=m;i++)if (i!=id&&e[i].w<=e[id].w){ add2(e[i].u,e[i].v,e[id].w+1-e[i].w); } int ans=0; while (dis[S]<nodes) ans+=dfs(S,inf); printf("%d\n",ans); }
相关文章推荐
- Qt Style Sheets Reference 笔记
- axis2 https is forbidden
- vim中批量注释与解注释python代码
- 通用的BaseActivity--android技术储备
- 把宏添加到自定义Ribbon并在所有Excel里运行它的方法
- 定时出票
- java类型占用字节数&类型转换
- 对话架构师:亿级短视频社交「美拍」架构实战
- 开源项目学习(微阅)
- 人生中的十个不要等(摘录于互联网)
- android4.2.2---1. hal层与framework层的调用
- 实现PHP服务器+Android客户端(Retrofit+RxJava)第三天Retrofit的配置以及缓存的实现
- jQuery中的一些常见方法小结(推荐)
- 定位datagridview在固定的位置
- Java加密技术(八)——数字证书
- Java并发编程:Callable、Future和FutureTask
- RabbitMQ 原文译05--Topics
- POI Excel 导入导出数据库
- delphi 文件搜索,遍历所有子目录
- Java加密技术(六)——数字签名算法DSA