题意:

有一群恐怖分子要从起点st到en城市集合,你要在路程中的城市阻止他们,使得他们全部都被抓到(当然st城市,en城市也可以抓捕)。在每一个城市抓捕都有一个花费,你要找到花费最少是多少。

题解:

  1. 1 //首先这一道题我原本是想这用bfs来做,因为这就相当于一棵树,你就只需要找出来怎么把它截断就可以
  2. 2 //但是这种方法我没有尝试,我还是用的最大流。那个每一个城市可以拆点成两个,然后这两个城市之间的
  3. 3 //权值设为这个城市的驻扎成本,然后如果两个城市相连,比如x和y相连,那么就可以建(x+n,y,INF),(y+n,x,INF)这
  4. 4 //两条边.然后跑最大流就可以了
  5. 5 //即使题目让你求都在哪几个点设防,你也可以写出来。因为跑完最大流之后要设防的点的流量都变成了0
  6. 6 #include<stdio.h>
  7. 7 #include<string.h>
  8. 8 #include<iostream>
  9. 9 #include<algorithm>
  10. 10 #include<queue>
  11. 11 using namespace std;
  12. 12 const int maxn=1200;
  13. 13 const int INF=0x3f3f3f3f;
  14. 14 int head[maxn],cnt,st,en,dis[maxn],cur[maxn];
  15. 15 struct edge
  16. 16 {
  17. 17 int v,next,c,flow;
  18. 18 } e[maxn*maxn];
  19. 19 void add_edge(int x,int y,int z)
  20. 20 {
  21. 21 e[cnt].v=y;
  22. 22 e[cnt].c=z;
  23. 23 e[cnt].flow=0;
  24. 24 e[cnt].next=head[x];
  25. 25 head[x]=cnt++;
  26. 26 }
  27. 27 bool bfs()
  28. 28 {
  29. 29 memset(dis,0,sizeof(dis));
  30. 30 dis[st]=1;
  31. 31 queue<int>r;
  32. 32 r.push(st);
  33. 33 while(!r.empty())
  34. 34 {
  35. 35 int x=r.front();
  36. 36 r.pop();
  37. 37 for(int i=head[x]; i!=-1; i=e[i].next)
  38. 38 {
  39. 39 int v=e[i].v;
  40. 40 if(!dis[v] && e[i].c>e[i].flow)
  41. 41 {
  42. 42 dis[v]=dis[x]+1;
  43. 43 r.push(v);
  44. 44 }
  45. 45 }
  46. 46 }
  47. 47 return dis[en];
  48. 48 }
  49. 49 int dinic(int s,int limit)
  50. 50 {
  51. 51 if(s==en || !limit) return limit;
  52. 52 int ans=0;
  53. 53 for(int &i=cur[s]; i!=-1; i=e[i].next)
  54. 54 {
  55. 55 int v=e[i].v,feed;
  56. 56 if(dis[v]!=dis[s]+1) continue;
  57. 57 feed=dinic(v,min(limit,e[i].c-e[i].flow));
  58. 58 if(feed)
  59. 59 {
  60. 60 e[i].flow+=feed;
  61. 61 e[i^1].flow-=feed;
  62. 62 limit-=feed;
  63. 63 ans+=feed;
  64. 64 if(limit==0) break;
  65. 65 }
  66. 66 }
  67. 67 if(!ans) dis[s]=-1;
  68. 68 return ans;
  69. 69 }
  70. 70 int main()
  71. 71 {
  72. 72 int s,d,n,m;
  73. 73 while(~scanf("%d%d",&n,&m))
  74. 74 {
  75. 75 scanf("%d%d",&s,&d);
  76. 76 memset(head,-1,sizeof(head));
  77. 77 cnt=0;
  78. 78 int x;
  79. 79 for(int i=1;i<=n;++i)
  80. 80 {
  81. 81 scanf("%d",&x);
  82. 82 add_edge(i,i+n,x);
  83. 83 add_edge(i+n,i,0);
  84. 84 }
  85. 85 st=s;
  86. 86 en=d+n;
  87. 87 while(m--)
  88. 88 {
  89. 89 int x,y;
  90. 90 scanf("%d%d",&x,&y);
  91. 91 add_edge(x+n,y,INF);
  92. 92 add_edge(y,x+n,0); //反向边也要建
  93. 93 add_edge(y+n,x,INF);
  94. 94 add_edge(x,y+n,0);
  95. 95 }
  96. 96 int ans=0;
  97. 97 while(bfs())
  98. 98 {
  99. 99 for(int i=0; i<=2*n; i++)
  100. 100 cur[i]=head[i];
  101. 101 ans+=dinic(st,INF);
  102. 102 }
  103. 103 printf("%d\n",ans);
  104. 104 }
  105. 105 return 0;
  106. 106 }

HDU 4289 Control(最大流+拆点,最小割点)的更多相关文章

  1. HDU 4289 Control (网络流,最大流)

    HDU 4289 Control (网络流,最大流) Description You, the head of Department of Security, recently received a ...

  2. hdu 4289 Control(最小割 + 拆点)

    http://acm.hdu.edu.cn/showproblem.php?pid=4289 Control Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  3. HDU 4289 Control (最小割 拆点)

    Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. HDU 4289 Control 最小割

    Control 题意:有一个犯罪集团要贩卖大规模杀伤武器,从s城运输到t城,现在你是一个特殊部门的长官,可以在城市中布置眼线,但是布施眼线需要花钱,现在问至少要花费多少能使得你及时阻止他们的运输. 题 ...

  5. I - Control - HDU 4289 (最大流)

    题意:有N个城市,现在城市S出现了一伙歹徒,他们想运送一些炸弹到D城市,不过警方已经得到了线报知道他们的事情,不过警察不知道他们所在的具体位置,所以只能采取封锁城市的办法来阻断暴徒,不过封锁城市是需要 ...

  6. hdu 4289 Control 网络流

    题目链接 给出一些点, 每个点有一个权值, 给出一些边, 起点以及终点, 去掉一些点使得起点和终点不连通, 求最小的val. 拆点, 把一个点s拆成s和s', 之间建一条边, 权值为点权. 对于一条边 ...

  7. HDU 4289 Control

    最小割 一个点拆成两个 AddEdge(i,i+N,x); 原图中的每条边这样连 AddEdge(u+N,v,INF); AddEdge(v+N,u,INF); S是源点,t+N是汇点.最大流就是答案 ...

  8. HDU - 4289 Control (Dinic)

    You, the head of Department of Security, recently received a top-secret information that a group of ...

  9. hdu 3277(二分+最大流+拆点+离线处理+模板问题...)

    Marriage Match III Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. .NET Core引入日志(Log4Net篇)

    Demo版本信息如下: VS:2019 框架:.Net Core 3.1 Log4Net:2.0.12 思维导图: [1]添加依赖项 通过nuget添加Log4Net [2]创建公共类 添加公共类Lo ...

  2. .NET 5 程序高级调试-WinDbg

    上周和大家分享了.NET 5开源工作流框架elsa,程序跑起来后,想看一下后台线程的执行情况.抓了个进程Dump后,使用WinDbg调试,加载SOS调试器扩展,结果无法正常使用了: 0:000> ...

  3. iptables自动屏蔽访问网站最频繁的IP

    iptables自动屏蔽访问网站频繁的IP 屏蔽每分钟访问超过200的IP 方法1:根据访问日志(Nginx为例 #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) AB ...

  4. 把vscode打造成技术写作神器

    作为技术开发,大家平时肯定需要记录技术笔记.甚至有的同学还开通可自己的技术博客或者技术公众号进行创作. 这个时候有套趁手的写作工具尤为重要,节省下时间好好休息一下,对于咱们程序员来说更加重要.因为最近 ...

  5. Kioptix Level 1

    1. 简介 Vulnhub是一个提供各种漏洞环境的靶场平台. 个人学习目的:1,方便学习更多类型漏洞.2,为OSCP做打基础. 下载链接 https://www.vulnhub.com/entry/k ...

  6. 三十三:WEB漏洞-逻辑越权之水平垂直越权

    水平和垂直越权 水平越权:可以获得同级别用户权限 垂直权限:享受高几个层次的用户权限 解释,原理,检测,利用,防御 通过更换的某个ID之类的身份标识,从而使得A账号获取(修改,删除)B账号的数据,通过 ...

  7. 关于java并发场景下,HttpServletRequst中session丢失问题

    使用场景: 在list数据进来之后使用安全数组    Lists.newCopyOnWriteArrayList() 进行了   parallelStream  并行处理,在接口中进行了登录者信息接口 ...

  8. 初审blucms(入坑)

    作为一名初来乍到审计小白,从blueCMS入手再好不过了.通过对入门级的cms进行审计以及一个整体的框架和常见的漏洞学习,对个人而言是一次不错的学习经历.话不多说直接进入主题. 代码审计环境 Blue ...

  9. JAVA SSM整合流程以及注意点

    1.搭建整合环境 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式 先搭建整合的环境 先把Spring的配置搭建完成 再使用Spring整合SpringMVC框架 最后使用Spr ...

  10. PHPday01

    1:概念 1.1.1 静态网站和动态网站 静态网站:不支持数据交互的网站,(html,htm) 动态网站:支持数据交互的网站 实现动态网站的技术: 实现技术 网站后缀 ASP技术 .asp PHP . ...