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

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

加入一个源点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. Selenium用法示例

    收录待用,修改转载已取得腾讯云授权 前言 在上一节我们学习了PhantomJS 的基本用法,归根结底它是一个没有界面的浏览器,而且运行的是 JavaScript 脚本,然而这就能写爬虫了吗?这又和Py ...

  2. javascript 的事件绑定和取消事件

    研究fabricjs中发现,它提供canvas.on('mousemove', hh) 来绑定事件, 提供 canvas.off()来取消绑定事件这样的接口,很是方便, 那我们就不妨探究一下内在的实现 ...

  3. 配置git账号和密码

    最开始启动的时候 配置用户名和用户邮箱,安装完git第一件要做的事情! git config --global uesr.name "Sunnshino" git config - ...

  4. FastGUI for NGUI教程

    原地址:http://blog.csdn.net/asd237241291/article/details/8499430 FastGUI是NGUI的一个扩展,所以必须要有NGUI才能使用.FastG ...

  5. 利用 MySQL 技能学习 DB2 Express: DB2 与 MySQL 的管理任务和基本任务

    原文地址:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0602tham2/index.html 简单介绍 管理不 ...

  6. Android开发之Is Library篇

    一.生活场景描述 由于公司有一个项目开发的时间比较长,项目里堆砌的代码也比较多,并且有些功能在给不同客户发布的时候有些功能还不需要,这样功能模块分离就很有必要了. 所以,Library就被推到了前台, ...

  7. javascript-ajax之json学习笔记

    ajax什么时候解析json的时候用eval 1.如果是原生js实现的ajax,就需要eval转json对象 如果使用了类似jquery的js插件,里面有些方法是不需要转的,因为jquery已经帮你处 ...

  8. 【转】SQL SERVER获取索引脚本

    关于如何获取索引脚本的语句很多,上次在项目中需要去查询并获取索引脚本,所以写了一个简单的查询语句来进行获取. WITH    idxcol          AS ( SELECT           ...

  9. nginx跨域(转2)

    当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服 ...

  10. 【Java集合源代码剖析】Java集合框架

    转载轻注明出处:http://blog.csdn.net/ns_code/article/details/35564663 Java集合工具包位于Java.util包下,包括了非常多经常使用的数据结构 ...