由于外国间谍的大量渗入,学校安全正处于高度的危机之中。YJY决定挺身而作出反抗。如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B。有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报。所以,如果我们能够收买一些间谍的话,我们就可能控制间谍网中的每一分子。因为一旦我们逮捕了一个间谍,他手中掌握的情报都将归我们所有,这样就有可能逮捕新的间谍,掌握新的情报。

  我们的神通广大的YJY获得了一份资料,色括所有已知的受贿的间谍,以及他们愿意收受的具体数额。同时我们还知道哪些间谍手中具体掌握了哪些间谍的资料。假设总共有n个间谍(n不超过3000),每个间谍分别用1到3000的整数来标识。

  请根据这份资料,判断我们是否有可能控制全部的间谍,如果可以,求出我们所需要支付的最少资金。否则,输出不能被控制的一个间谍。

输入描述 Input Description

第一行只有一个整数n。

  第二行是整数p。表示愿意被收买的人数,1≤p≤n。

  接下来的p行,每行有两个整数,第一个数是一个愿意被收买的间谍的编号,第二个数表示他将会被收买的数额。这个数额不超过20000。

  紧跟着一行只有一个整数r,1≤r≤8000。然后r行,每行两个正整数,表示数对(A, B),A间谍掌握B间谍的证据。

输出描述 Output Description

如果可以控制所有间谍,第一行输出YES,并在第二行输出所需要支付的贿金最小值。否则输出NO,并在第二行输出不能控制的间谍中,编号最小的间谍编号。

样例输入 Sample Input

【样例1】

3

2

1 10

2 100

2

1 3

2 3

【样例2】

4

2

1 100

4 200

2

1 2

3 4

样例输出 Sample Output

【样例1】

YES

110

【样例2】

NO<a name="_GoBack"></a>

3

#include<cstdio>
#include<iostream>
#include<vector>
#include<stack>
#include<cstring>
#define M 3010
using namespace std;
int low[M],num[M],money[M],vis[M],instack[M],belong[M],in[M],out[M],value[M];
int n,cnt,indexx;
vector<int> grap[M];
stack<int> s;
void tarjan(int v)
{low[v]=num[v]=++indexx;vis[v]=1;instack[v]=1;s.push(v);for(int i=0;i<grap[v].size();i++){int w=grap[v][i];if(!vis[w]){tarjan(w);low[v]=min(low[v],low[w]);}else if(instack[w])low[v]=min(low[v],num[w]);}int u;if(low[v]==num[v]){cnt++;do{u=s.top();belong[u]=cnt;if(money[u])value[cnt]=min(value[cnt],money[u]);s.pop();instack[u]=0;}while(u!=v);}
}
int main()
{memset(value,0x7f,sizeof(value));int p,m;scanf("%d%d",&n,&p);for(int i=1;i<=p;i++){int x,y;scanf("%d%d",&x,&y);money[x]=y;}scanf("%d",&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);grap[x].push_back(y);}for(int i=1;i<=n;i++)if(!vis[i]) tarjan(i);for(int i=1;i<=n;i++)for(int j=0;j<grap[i].size();j++)if(belong[i]!=belong[grap[i][j]]){out[belong[i]]++;in[belong[grap[i][j]]]++;}int ans=0,who=M;for(int i=1;i<=cnt;i++)if(!in[i]){if(value[i]<=20000)ans+=value[i];else{  for(int j=1;j<=n;j++)if(belong[j]==i)who=min(who,j);}}if(who<M)printf("NO\n%d",who);else printf("YES\n%d",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/harden/p/5596805.html

EZ的间谍网络(codevs 4093)相关推荐

  1. 缩点【洛谷P1262】 间谍网络

    [洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...

  2. P1262 间谍网络

    传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) ...

  3. 洛谷P1262 间谍网络题解

    洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...

  4. Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925

    题目传送门 真是一道好题呀~~~~qwq 知道这题是tarjan,但是想了很久怎么用上强连通分量.因为样例们...它显然并不是一个强联通分量! (被样例迷惑的最好例子) 然后...就没有然后了...感 ...

  5. loj10095 间谍网络

    题目描述 由于外国间谍的大量渗入,国家安全正处于高度危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍接受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报. ...

  6. P1262_美帝的间谍网络被我部捕获!

    题面 这道题太神了吧,从昨晚七点半做到今天下午两点. 我经历了以下折腾(以下内容可跳过): 一开始想的是用Tarjan缩点,然后以可以被收买的间谍为起点跑最短路,通过路径染色,让一条路径上的点的权值等 ...

  7. P1262 间谍网络 (tarjan缩点 水过去)

    题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...

  8. 洛谷1262 间谍网络 tarjan缩点

    题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...

  9. Tyvj P1153 间谍网络

    代码来自dxh,注释来自lex 1 program ty1153; 2 var 3 inv,cost,nv,v,f,stk,dfn,low,min,sml:array[1..3000]of longi ...

最新文章

  1. 《文献检索》随感-2003年10月24日
  2. iOS点击推送消息跳到应用指定页面
  3. 【软件工程】关于计算机的一些问答与思考
  4. nodejs如何实现ajax,nodejs使用静态服务器处理ajax
  5. 机械制图国家标准的绘图模板_如何使用p5js构建绘图应用
  6. module.exports和exports得区别
  7. LeetCode 1153. 字符串转化(哈希)
  8. DataBseDesign工作笔记004---PowerDesigner导入sql脚本生成物理模型
  9. 你的学习方法真的有效吗?
  10. java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
  11. python识别中文中的名字地点时间_python中判断时间间隔的问题
  12. 小米2s自带rec刷root_关于vivo手机的root
  13. 手动实现直方图匹配(python)
  14. Android下的串口通信实战之电子秤交互
  15. 医学流体力学血流动力学仿真模拟计算及临床应用
  16. logstash 日志收集
  17. php 上传图片 裁剪,thinkphp_图片上传裁剪功能_已迁移
  18. 电驴瘫痪网友纷纷“哀悼” 官网称线路故障10日恢复
  19. SIFT算法原理(2)-极值点的精确定位
  20. 流程图设计教程和参考样例

热门文章

  1. oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
  2. oracle group by ,having ,order by
  3. linux shell命令行及脚本编程实例详解_超全整理!这些Shell编程必备知识你都掌握了吗?...
  4. 记一次某APK的恶意WIFI攻击
  5. shell脚本获取绝对路径
  6. Linux写时拷贝技术(copy-on-write)
  7. Cacheable注解使用详解
  8. iOS 混合网页开发 问题
  9. Linux运维工程师:30道面试题整理
  10. ogre研究之第一个程序(二)