NYIST 677 碟战

碟战
时间限制:2000 ms | 内存限制:65535 KB
难度:4

描述
知己知彼,百战不殆!在战争中如果被敌人掌握了自己的机密,失败是必然的。K国在一场战争中屡屡失败,就想到自己的某些城市可能会有敌方的间谍。
在仔细调查后,终于得知在哪些城市存在间谍。当然这个消息也被敌方间谍得知,所以间谍们开始撤离,试图到达K国唯一机场,然后抢夺飞机回国。由于城市内部比较复杂,K国领导人决定封锁道路,阻止所有间谍到达机场。城市编号为1~N,两个城市有不超过1条双向道路相连。机场在N号城市,不会有间碟。
由于要节约兵力,至少要封锁多少条道路才能阻止所有间谍到达机场?

输入
第一行包含一个整数T(T <= 100),为测试数据组数。
接下来每组测试数据第一行包含三个整数n,m,p(2<= n <= 200,1< m < 20000,1 <= p < n),分别表示城市数量,道路数量,存在间谍的城市的数量。
接下来的一行包含p个整数x(1 <= x < n),表示存在间谍城市的编号。
接下来的m行,每行包含两个整数i,j,表示城市i与城市j有道路相通。

输出
输出“Case #i: ans”(不含引号),i为第i组数据,ans为需要封锁道路的条数。
样例输入
2
4 4 2
1 2
1 2
2 4
1 3
3 4
4 3 2
1 2
2 3
3 4
2 4

样例输出
Case #1: 2
Case #2: 2

来源
NYIST第一届校赛(专业组)

上传者
ACM_李如兵

解题:求最小割

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <climits>
 7 #include <vector>
 8 #include <queue>
 9 #include <cstdlib>
10 #include <string>
11 #include <set>
12 #include <stack>
13 #define LL long long
14 #define pii pair<int,int>
15 #define INF 0x3f3f3f3f
16 using namespace std;
17 const int maxn = 210;
18 struct arc{
19     int to,flow,next;
20     arc(int x = 0,int y = 0,int z = -1){
21         to = x;
22         flow = y;
23         next = z;
24     }
25 };
26 arc e[200000];
27 int head[maxn],d[maxn],cur[maxn];
28 int tot,S,T;
29 void add(int u,int v,int flow){
30     e[tot] = arc(v,flow,head[u]);
31     head[u] = tot++;
32     e[tot] = arc(u,0,head[v]);
33     head[v] = tot++;
34 }
35 bool bfs(){
36     queue<int>q;
37     memset(d,-1,sizeof(d));
38     d[S] = 1;
39     q.push(S);
40     while(!q.empty()){
41         int u = q.front();
42         q.pop();
43         for(int i = head[u]; ~i; i = e[i].next){
44             if(e[i].flow && d[e[i].to] == -1){
45                 d[e[i].to] = d[u] + 1;
46                 q.push(e[i].to);
47             }
48         }
49     }
50     return d[T] > -1;
51 }
52 int dfs(int u,int low){
53     if(u == T) return low;
54     int tmp = 0,a;
55     for(int &i = cur[u]; ~i; i = e[i].next){
56         if(e[i].flow > 0&& d[e[i].to] == d[u]+1 &&(a=dfs(e[i].to,min(low,e[i].flow)))){
57             e[i].flow -= a;
58             e[i^1].flow += a;
59             tmp += a;
60             low -= a;
61             if(!low) break;
62         }
63     }
64     if(!tmp) d[u] = -1;
65     return tmp;
66 }
67 int dinic(){
68     int ans = 0;
69     while(bfs()){
70         memcpy(cur,head,sizeof(head));
71         ans += dfs(S,INF);
72     }
73     return ans;
74 }
75 int main() {
76     int cs,n,m,p,u,v,cc = 1;
77     scanf("%d",&cs);
78     while(cs--){
79         scanf("%d %d %d",&n,&m,&p);
80         memset(head,-1,sizeof(head));
81         S = 0;
82         T = n;
83         for(int i = tot = 0; i < p; ++i){
84             scanf("%d",&u);
85             add(S,u,INF);
86         }
87         for(int i = 0; i < m; ++i){
88             scanf("%d %d",&u,&v);
89             add(u,v,1);
90             add(v,u,1);
91         }
92         printf("Case #%d: %d\n",cc++,dinic());
93     }
94     return 0;
95 }

时间: 2024-08-16 18:35:21

NYIST 677 碟战的相关文章

二人对战游戏 结构体+函数

class 对战713 { struct Player { public string Name; public int Blood; public int Attact; public int Defence; public int DuoBi; public ArrayList JiNeng; public ArrayList ShangHai; } static void Main (string[] args) { #region 定义技能库 string[] JN; int[] SH;

【UOJ】【UR #2】猪猪侠再战括号序列(splay/贪心)

http://uoj.ac/problem/31 纪念伟大的没有调出来的splay... 竟然那个find那里写错了!!!!!!!!!!!!! 以后要记住:一定要好好想过! (正解的话我就不写了,太简单了.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #

用 MuGo 搭建 Go Engine 在 KGS 对战

MuGo 是一个开源的 Go Engine,下棋能力大概在 10k - 2k 左右. 用 MuGo 搭建 Go Engine 并在 KGS 对战的步骤如下: 1. 安装 TensorFlow 因为 MuGo 要用 Python3,所以要用 Python 3 的 TensorFlow 版本,或者用 Python3 编译源码安装. 2. 下载 MuGo https://github.com/brilee/MuGo 因为 MuGo 是 python 写的,并且自带训练好的 model,所以下载后可以直

20170730 《战狼2》观影纪要

去看<战狼2>的那天,其实本来是打算去看<绣春刀2>的,但是没票了,听说<战狼2>口碑不错,就改了.那天没想到<战狼2>会是一部50亿+票房的主. 由于看完已经两周了,下面仅凭记忆提取下内容概要. 开局就是水下激战的那一段,感觉还行,可能拍的挺辛苦,但是个人感觉没有网络上说的那么震撼.见仁见智了. 观众不禁会想,为什么冷锋跑到一个商用船上,而且还是在非洲.回到三年前,一个拆迁现场,冷锋几个战友带着上一级中牺牲的队长骨灰回到老家,结果战友的老家正在被一个包工头

十年一场云之战,重建这些科技公司与人的技术信仰

2006年是一个开始,当时一个叫做Amazon Web Service的小业务,掀起了一场十年之久.席卷全球的云计算狂潮. 从2000左右年开始的互联网大潮已经让很多科技企业对互联网盲目崇拜,然而自2006年由亚马逊开始的一场云之战,才让更多的传统科技企业彻底失去了方向.因为源自亚马逊的AWS云计算模式,彻底颠覆了微软.IBM.VMware.Oracle.Cisco.HP等一系列曾经的科技巨头,这些曾经被全球其它所有科技公司视为风向标的公司终于风光不在,转而各自寻找新生存与发展方向. 2017年

解密:腾讯如何打造一款实时对战手游

2015年以来,手机游戏的市场偏好,逐渐从早期的休闲类.跑酷类.卡牌类游戏,转向重度.操作性更强的ARPG .FPS..MOBA类游戏.因此实时对战这一游戏玩法,也逐渐成为了手机游戏的一个核心玩法.纵观AppStore畅销榜前十的游戏,过半都支持玩家实时的PK或者合作攻关.由于实时对战有玩家之间自发进行强互动的特点,活跃度和社交强度都是比较高,为游戏的用户活跃和流水的提高奠定了坚实的基础. 腾讯的游戏开发团队,很早就观察到实时对战这一核心玩法对游戏生命周期影响的重要性,因此在自研产品方面,加大力

移动流量入口终于重开 “输入法”暗战人工智能

各家"输入法"此刻用专利问题互相攻伐,其目的除了追求曝光度外,也有分散对手精力,减缓步伐,为自己赢得时间的考量 文/张书乐 刊载于<法人>杂志2016年12月刊 在输入法领域,以熊爪为标识的百度和以狗冠名的搜狗,多年来已经撕咬过多次.近日,百度表示,已正式向北京知识产权法院起诉搜狗侵权,起诉书中称"搜狗拼音输入法"和"搜狗手机输入法"侵犯百度输入法10项技术专利,要求搜狗赔偿金额1亿元. 这是一次年度例行开撕,还是别有所图?2010年

基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

基于C/S架构的3D对战网络游戏C++框架 _03客户端详细设计与OpenGL、Qt基础

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.