题目链接:ヾ(≧∇≦*)ゝ

Solution:

第一问很好解决,根据网络流:最大流=最小割定理,我们可以轻松求出。

至于第二问,我们不妨把每一条边乘上一个大于1000的数再加上1。

这样的话,对于最小割,显然就是求出来的\(maxflow/W\)(W为乘上的数)。

而对于第二问,则是\(maxflow\,\,mod \,\,W\),因为每割去一条边,它就会加上1

Code:

#include<bits/stdc++.h>
#define N 3001
#define inf 1926081700
#define int long long
using namespace std;
int n,m,cnt=1;
int S=1,T,head[N];
struct Edge{int nxt,to,v;}edge[N];
void ins(int x,int y,int z){
edge[++cnt].nxt=head[x];
edge[cnt].to=y;edge[cnt].v=z;
head[x]=cnt;
}
namespace Network_Flow{
queue<int> q;
int delta,dep[N];
int bfs(){
delta=inf;
memset(dep,0,sizeof(dep));
q.push(S);dep[S]=1;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i;i=edge[i].nxt)
if(!dep[edge[i].to]&&edge[i].v){
dep[edge[i].to]=dep[x]+1;
delta=min(delta,edge[i].v);
q.push(edge[i].to);
}
}
return dep[T];
}
int dfs(int x,int rest){
if(x==T||rest<=0) return rest;
int flow=0;
for(int i=head[x];i;i=edge[i].nxt){
int y=edge[i].to,v=edge[i].v;
if(v&&dep[y]==dep[x]+1){
int now=dfs(y,min(rest,v));
edge[i].v-=now;
edge[i^1].v+=now;
flow+=now;rest-=now;
if(rest<=0) break;
}
}
return flow;
}
void dinic(){
int maxflow=0;
while(bfs()) maxflow+=dfs(S,inf);
int ans1=maxflow,ans2=maxflow;
printf("%lld %lld\n",ans1/N,ans2%N);
}
}
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();};
return x*f;
}
signed main(){
n=read(),m=read();T=n;
for(int x,y,z,i=1;i<=m;i++){
x=read(),y=read(),z=read();
ins(x,y,z*N+1);ins(y,x,0);
}
using namespace Network_Flow;
dinic();
return 0;
}

最新文章

  1. oracle initialization or shutdown in progress解决方法
  2. XCODE shouldAutorotateToInterfaceOrientation 对于不同版本 设备旋转不同方向时 视图的相应旋转方向的实现
  3. mydumper原理4
  4. Delphi的指针 good
  5. MUI判断网络连接以及监听网络变化JS
  6. this到底指向哪里
  7. 分享:docker swarm集群搭建
  8. 在右键中添加以管理员运行CMD命令提示符 (进化版)
  9. Redis订阅与发布
  10. Redis数据结构之intset(2)
  11. OpenStack 安装:glance 安装
  12. solr 字段设置不存储表示不会进行分词
  13. J2EE与EJB
  14. java实现hash一致性算法
  15. 洛谷P3959 [NOIP2017]宝藏
  16. 关于beginPath()和closePath()的关系&gt;&gt;canvas的beginPath和closePath分析总结,包括多段弧的情况
  17. saltstack进阶
  18. cmd命令笔记
  19. ActivityGroup window bad token问题深入分析
  20. ZOJ - 3201 Tree of Tree (树形背包)

热门文章

  1. 虚拟机上不能使用CUDA
  2. 汇编 浮点指令FLD,FSTP,FADD与FPU寄存器
  3. mybatis源码-解析配置文件(二)之解析的流程
  4. stl源码剖析 详细学习笔记 RB_tree (1)
  5. nodejs 监控代码变动实现ftp上传
  6. dokuwiki工具栏添加换行回车快捷键与按钮
  7. libimobiledevice --Mingw32交叉编译
  8. IOTA price analysis
  9. 实战重现隐藏在A标签_blank下的危险漏洞,简略说明noopener的作用
  10. DRF框架获取参数的方式