题意:

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

题解:

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

    不记得自己究竟更改了什么东西,然后突然发现所有的有关mysql的监控items都变成了not supported,怎么做不行,最后在web主页把主机删除,又重新添加一下,重新添加了一下模版就好了.这究 ...

  3. Spring框架之事务源码完全解析

    Spring框架之事务源码完全解析   事务的定义及特性: 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一 ...

  4. centos7安装vsftpd最大的坑

    1.检查用户和密码没有错误2.vsftpd.conf配置没有错误3.检查/etc/vsftpd/vsftpd.conf  里面pam_service_name =vsftpd4.终极boss查看vim ...

  5. 1.2V转5V稳压芯片,低功耗电路

    PW5100具有将低输入电压0.7V-5V之间的范围,升压型,升压到5V的稳定电压输出. 可以使其镍氢电池1.2V稳定输出5V的1.2V转5V芯片. PW5100具有极低的输入静态功耗,1.2V时,应 ...

  6. js实现简单的俄罗斯方块小游戏

    js实现简单的俄罗斯方块小游戏 开始 1. 创建一个宽为 200px,高为 360px 的背景容器 <!DOCTYPE html> <html lang="en" ...

  7. proxmox ve系统绑定上联外网出口bond双网卡

    背景描述:一个客户搭建proxmox ve系统,要求上联出口双网卡绑定bond, proxmox ve下载地址:超链接 记录日期:2020/5/9 前期准备:服务器接好2个网卡 交换机:H3C 1.p ...

  8. 一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践

    一套高可用.易伸缩.高并发的IM群聊.单聊架构方案设计实践 一套高可用.易伸缩.高并发的IM群聊.单聊架构方案设计实践-IM开发/专项技术区 - 即时通讯开发者社区! http://www.52im. ...

  9. 中央事件总线 事件驱动架构(EDA) 解析事件总线的4种实现方式

    事件驱动架构(EDA)https://mp.weixin.qq.com/s/nA8XFD2Rx_7qA_LxltGGHw https://mp.weixin.qq.com/s/cD3auglgKzOb ...

  10. JavaScript代码是怎么执行的?

    前言 众所周知,JavaScript是单线程语言.所以JavaScript是按顺序执行的! 先编译再执行 变量提升 请看下面的例子: console.log(cat) catName("Ch ...