题目描述

匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警
方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点

输入

第一行输入N,M代表车站的总个数,及有多少条双向边连接它们. 
2<=n<=200 , 1 <=m<=20000. 
第二行给出两个数a,b,代表匪徒的出发点及目标点.1<=a,b<=N,a<>b. 
再下来有N行,给出对第i个车站进行布控所需要的Money,其不超过10 000 000 
再下来M行,用于描述图的结构.

输出

最少需要多少Money

样例输入

5 6
5 3
2
4
8
3
10
1 5
1 2
2 4
4 5
2 3
3 4

样例输出

5
 
 
  题意就是让删除一些点使得源点和汇点不联通且删除点权和最小,将每个点拆成一个入点和一个出点,两点间边权为原来点的点权,然后建双向边,就把问题转换成了求网络最小割。
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<queue>
  7. using namespace std;
  8. int next[6000001];
  9. int to[6000001];
  10. int val[6000001];
  11. int head[6000001];
  12. int tot=1;
  13. int q[6000001];
  14. int n,m;
  15. int S,T;
  16. int x,y;
  17. int k1,k2;
  18. int ans;
  19. int d[6000001];
  20. const int INF=0x3f3f3f3f;
  21. void add(int x,int y,int v)
  22. {
  23. tot++;
  24. next[tot]=head[x];
  25. head[x]=tot;
  26. to[tot]=y;
  27. val[tot]=v;
  28. tot++;
  29. next[tot]=head[y];
  30. head[y]=tot;
  31. to[tot]=x;
  32. val[tot]=0;
  33. }
  34. bool bfs(int S,int T)
  35. {
  36. int r=0;
  37. int l=0;
  38. memset(d,-1,sizeof(d));
  39. q[r++]=S;
  40. d[S]=0;
  41. while(l<r)
  42. {
  43. int now=q[l];
  44. for(int i=head[now];i;i=next[i])
  45. {
  46. if(d[to[i]]==-1&&val[i]!=0)
  47. {
  48. d[to[i]]=d[now]+1;
  49. q[r++]=to[i];
  50. }
  51. }
  52. l++;
  53. }
  54. if(d[T]==-1)
  55. {
  56. return false;
  57. }
  58. else
  59. {
  60. return true;
  61. }
  62. }
  63. int dfs(int x,int flow)
  64. {
  65. if(x==T)
  66. {
  67. return flow;
  68. }
  69. int now_flow;
  70. int used=0;
  71. for(int i=head[x];i;i=next[i])
  72. {
  73. if(d[to[i]]==d[x]+1&&val[i]!=0)
  74. {
  75. now_flow=dfs(to[i],min(flow-used,val[i]));
  76. val[i]-=now_flow;
  77. val[i^1]+=now_flow;
  78. used+=now_flow;
  79. if(now_flow==flow)
  80. {
  81. return flow;
  82. }
  83. }
  84. }
  85. if(used==0)
  86. {
  87. d[x]=-1;
  88. }
  89. return used;
  90. }
  91. void dinic()
  92. {
  93. while(bfs(S,T)==true)
  94. {
  95. ans+=dfs(S,0x3f3f3f);
  96. }
  97. }
  98. int main()
  99. {
  100. scanf("%d%d",&n,&m);
  101. scanf("%d%d",&k1,&k2);
  102. S=k1;
  103. T=n+k2;
  104. for(int i=1;i<=n;i++)
  105. {
  106. scanf("%d",&x);
  107. add(i,n+i,x);
  108. }
  109. for(int i=1;i<=m;i++)
  110. {
  111. scanf("%d%d",&x,&y);
  112. add(n+x,y,INF);
  113. add(n+y,x,INF);
  114. }
  115. dinic();
  116. printf("%d",ans);
  117. return 0;
  118. }

BZOJ1163&BZOJ1339[Baltic2008]Mafia——最小割的更多相关文章

  1. [BZOJ1163][BZOJ1339][Baltic2008]Mafia

    [BZOJ1163][BZOJ1339][Baltic2008]Mafia 试题描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用 ...

  2. bzoj1339[Baltic2008]Mafia*

    bzoj1339[Baltic2008]Mafia 题意: 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控.对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得 ...

  3. [BZOJ1339] [Baltic2008] Mafia / 黑手党

    Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价, 现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的 ...

  4. 【bzoj1163/bzoj1339】[Baltic2008]Mafia 网络流最小割

    题目描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点 ...

  5. bzoj1339/1163:[Baltic2008]Mafia

    传送门 最小割,割点,模板... 代码: #include<cstdio> #include<iostream> #include<algorithm> #incl ...

  6. 1339 / 1163: [Baltic2008]Mafia

    1163: [Baltic2008]Mafia Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 96  Solved: 60[Submit][Statu ...

  7. 1163: [Baltic2008]Mafia

    1163: [Baltic2008]Mafia Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 123  Solved: 70[Submit][Stat ...

  8. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  9. BZOJ-2127-happiness(最小割)

    2127: happiness(题解) Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1806  Solved: 875 Description 高一 ...

随机推荐

  1. 洛谷 P2256 一中校运会之百米跑

    题目链接 https://www.luogu.org/problemnew/show/P2256 题目背景 在一大堆秀恩爱的**之中,来不及秀恩爱的苏大学神踏着坚定(?)的步伐走向了100米跑的起点. ...

  2. ftp 传输数据:命令链路连接方法是一样的,而数据链路的建立方法就完全不同

    0.FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. PORT(主动)连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链 ...

  3. Android popupMenu

    popupMenu = new PopupMenu(ActivityHousesNumList.this, imageViewhousesnum1); popupMenu.getMenuInflate ...

  4. day89

    跨域问题 同源策略(Same origin policy) 是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上 ...

  5. 常见camera测试卡

    常见camera测试卡     版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/luckywang1103/article/details/87166 ...

  6. CAN协议教程

    介绍:CAN总线 CAN总线是广播类型的总线.这意味着所有节点都可以侦听到所有传输的报文.无法将报文单独发送给指定节点:所有节点都将始终捕获所有报文.但是,CAN硬件能够提供本地过滤功能,让每个节点对 ...

  7. zookeepeer集群搭建

    一.预备工作 1.zookeepeer需要安装JDK,至于版本,大家可以去官网查询一下.这里我安装的是JDK8. 2.需要开放zookeepeer用到的端口,默认端口2181.2888.3888,至于 ...

  8. .NET持续集成与自动化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器

    使用NuGet.Server搭建公司内部的Nuget(包)管理器 前言     Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基 ...

  9. 天气提醒邮件服务器(python + scrapy + yagmail)

    天气提醒邮件服务器(python + scrapy + yagmail) 项目地址: https://gitee.com/jerry323/weatherReporter 前段时间因为xxx上班有时候 ...

  10. 第二次作业 --- 我对QQ的评测

    腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功能,并可与多 ...