本题能够说是最小割入门级题目。

假设能想到是最小割问题。那么建图思路便是水到渠成的事了。

加入一个源点S和汇点T;

把S与每一个间谍相连。容量为无穷大;

把城市N(即飞机场的位置)与汇点T相连。容量为无穷大;

之间有道路的城市相连。容量为1,注意这里是双向的边;

建图完后,依据最大流最小割定理。那么直接求最大流就可以。

闲话少说,上代码:

#include<iostream>
using namespace std;
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<algorithm> #define INS 1<<30
#define CLR(arr,v) memset(arr,v,sizeof(arr)) #define MaxV 3000
#define MaxE 100000 class MaxFlow{
public:
void Clear(){
CLR(h,-1); CLR(cnt,0); CLR(vis,0);
flag = false;
pos = top = head = total = maxflow = 0;
}
void add(int u,int v,int flow){
num[pos] = v;
sur[pos] = flow;
next[pos] = h[u];
h[u] = pos++; num[pos] = u;
sur[pos] = 0;
next[pos] = h[v];
h[v] = pos++;
}
int GetMaxFlow(int s,int t){
init(t);
stk[top] = s;
while(!flag){
minres = INS;
if(top < 0) top = 0;
if(!dfs(stk[top],-1,t,minres)) continue;
maxflow += minres;
while(dis != -1){
sur[dis] -= minres;
sur[dis^1] += minres;
dis = pre_e[dis];
}
top = 0;
}
return maxflow;
}
private:
int h[MaxV],num[MaxE],sur[MaxE],next[MaxE],gap[MaxV],cnt[MaxV],pre_e[MaxE],stk[MaxV],que[MaxV];
int pos,top,head,total,maxflow,minres,dis;
bool vis[MaxV],flag;
void init(int n){
que[total++] = n;
vis[n] = true;
while(head < total){
int p = que[head++];
if(head >= MaxV) head -= MaxV;
for(int i = h[p]; i != -1 ;i = next[i]){
if(!vis[ num[i] ]){
vis[ num[i] ] = true;
gap[ num[i] ] = gap[p] + 1;
cnt[ gap[ num[i] ] ]++;
que[total++] = num[i];
if(total >= MaxV) total -= MaxV;
}
}
}
}
bool dfs(int p,int father,int n,int &minres){
int m = minres;
for(int i = h[p]; i != -1 ;i = next[i]){
if(sur[i] > 0 && gap[p] - gap[ num[i] ] == 1){
minres = min(minres,sur[i]);
pre_e[i] = father;
if(num[i] != n) stk[++top] = num[i];
if(num[i] == n || dfs(num[i],i,n,minres)) {
if(num[i] == n) dis = i;
return true;
}
minres = m;
}
}
cnt[ gap[p] ]--;
cnt[ gap[p] + 1]++;
top--;
if(cnt[ gap[p] ] == 0) flag = true;
gap[p] += 1;
return false;
}
}T; int main()
{
int t;
scanf("%d",&t);
int cnt = 0;
while (t--)
{
int n,m,p;
scanf("%d%d%d",&n,&m,&p); int N = n + 1;
T.Clear(); int x;
for (int i = 1; i <= p; ++ i)
scanf("%d",&x),T.add(0,x,INS); for (int i = 1; i <= m; ++ i)
{
int u,v;
scanf("%d%d",&u,&v);
T.add(u,v,1);
T.add(v,u,1);
} T.add(n,N,INS); printf("Case #%d: %d\n",++cnt,T.GetMaxFlow(0,N));
}
return 0;
}

nyoj677 谍战的更多相关文章

  1. 黑客炼金术士 Seeker:可以攻破 4G 摸到你短信,还要为朝阳群众提供谍战工具

    在北京上地的一家咖啡馆里,我在等待黑客 Seeker 的到来. 我对黑客 Seeker 颇有期待.他曾在黑客大会 KCon 上演讲<伪基站高级利用技术——彻底攻破短信验证码>,介绍利用 L ...

  2. 使用C#处理基于比特流的数据

    使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...

  3. 关于试用jquery的jsonp实现ajax跨域请求数据的问题

    我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...

  4. [转]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    本文转自:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两 ...

  5. json jsonp的区别

     前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域 ...

  6. JSON和JSONP (含jQuery实例)(share)

    来源:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两个问 ...

  7. 【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...

  8. json和jsonp(json是目的,jsonp是手段)

    自己理解:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议.我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的" ...

  9. 说说JSON和JSONP,也许你会豁然开朗(转)

    前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...

随机推荐

  1. [Android]Volley源代码分析(二)Cache

    Cache作为Volley最为核心的一部分,Volley花了重彩来实现它.本章我们顺着Volley的源代码思路往下,来看下Volley对Cache的处理逻辑. 我们回忆一下昨天的简单代码,我们的入口是 ...

  2. diamond淘宝框架使用

    转载:http://blog.csdn.net/coolyqq/article/details/50435634 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单.可靠. ...

  3. LOGO闪光效果

    原地址:http://cl314413.blog.163.com/blog/static/1905079762014122105235138/ 这个效果在很多LOGO及广告宣传中都会用到.商业开发的做 ...

  4. JSON字符串化

    1.JSON字符串化 JSON字符串化有2个可选参数,分别是replacer和space. 第一个可选参数replacer,它可以是数组或者函数.用来指定哪些属性被处理,哪些属性被排除. 第二个可选参 ...

  5. java学习路线-Java技术人员之路从0基础到高级

    满满的  全是干货 java基础: 尚学堂 马士兵   个人推荐 历经5年锤练--史上最适合刚開始学习的人入门的Java基础视频   很具体   适合 时间多的看 传智播客java基础班 马士兵线程 ...

  6. C语言学习笔记(五) 数组

    数组 数组的出现就是为了解决大量同类型数据的存储和使用的问题: 数组的分类:一维数组.二维数组. 一维数组:为多个变量连续分配存储控件:所有的变量的数据类型必须相同:所有变量所占的字节大小必须相等: ...

  7. 【CODEFORCES】 C. Table Decorations

    C. Table Decorations time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. mac apt-get--> Homebrew

    在最近采集linux进程网络指标的时候,为了对比采集结果,需要linux系统查看进程网络流量命令,最后查到nethogs 这个工具好用,但是在下载安装过程中碰到问题: 1:http://blog.cs ...

  9. 我的 Android 学习笔记-Okhttp 的使用(译)

    okhttp 已经是非常流行的网络请求库了.网上介绍的文章非常之多,但感觉都不是特别系统.遂想到官方应该有介绍的文档,仔细寻找一番,果然.但可惜是英文的,于是就大致翻译了一下,权当做笔记了. 1.Ca ...

  10. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27

    Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...