EZ的间谍网络(codevs 4093)
由于外国间谍的大量渗入,学校安全正处于高度的危机之中。YJY决定挺身而作出反抗。如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B。有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报。所以,如果我们能够收买一些间谍的话,我们就可能控制间谍网中的每一分子。因为一旦我们逮捕了一个间谍,他手中掌握的情报都将归我们所有,这样就有可能逮捕新的间谍,掌握新的情报。
我们的神通广大的YJY获得了一份资料,色括所有已知的受贿的间谍,以及他们愿意收受的具体数额。同时我们还知道哪些间谍手中具体掌握了哪些间谍的资料。假设总共有n个间谍(n不超过3000),每个间谍分别用1到3000的整数来标识。
请根据这份资料,判断我们是否有可能控制全部的间谍,如果可以,求出我们所需要支付的最少资金。否则,输出不能被控制的一个间谍。
第一行只有一个整数n。
第二行是整数p。表示愿意被收买的人数,1≤p≤n。
接下来的p行,每行有两个整数,第一个数是一个愿意被收买的间谍的编号,第二个数表示他将会被收买的数额。这个数额不超过20000。
紧跟着一行只有一个整数r,1≤r≤8000。然后r行,每行两个正整数,表示数对(A, B),A间谍掌握B间谍的证据。
如果可以控制所有间谍,第一行输出YES,并在第二行输出所需要支付的贿金最小值。否则输出NO,并在第二行输出不能控制的间谍中,编号最小的间谍编号。
【样例1】
3
2
1 10
2 100
2
1 3
2 3
【样例2】
4
2
1 100
4 200
2
1 2
3 4
【样例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)相关推荐
- 缩点【洛谷P1262】 间谍网络
[洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...
- P1262 间谍网络
传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) ...
- 洛谷P1262 间谍网络题解
洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...
- Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925
题目传送门 真是一道好题呀~~~~qwq 知道这题是tarjan,但是想了很久怎么用上强连通分量.因为样例们...它显然并不是一个强联通分量! (被样例迷惑的最好例子) 然后...就没有然后了...感 ...
- loj10095 间谍网络
题目描述 由于外国间谍的大量渗入,国家安全正处于高度危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍接受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报. ...
- P1262_美帝的间谍网络被我部捕获!
题面 这道题太神了吧,从昨晚七点半做到今天下午两点. 我经历了以下折腾(以下内容可跳过): 一开始想的是用Tarjan缩点,然后以可以被收买的间谍为起点跑最短路,通过路径染色,让一条路径上的点的权值等 ...
- P1262 间谍网络 (tarjan缩点 水过去)
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷1262 间谍网络 tarjan缩点
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 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 ...
最新文章
- 《文献检索》随感-2003年10月24日
- iOS点击推送消息跳到应用指定页面
- 【软件工程】关于计算机的一些问答与思考
- nodejs如何实现ajax,nodejs使用静态服务器处理ajax
- 机械制图国家标准的绘图模板_如何使用p5js构建绘图应用
- module.exports和exports得区别
- LeetCode 1153. 字符串转化(哈希)
- DataBseDesign工作笔记004---PowerDesigner导入sql脚本生成物理模型
- 你的学习方法真的有效吗?
- java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
- python识别中文中的名字地点时间_python中判断时间间隔的问题
- 小米2s自带rec刷root_关于vivo手机的root
- 手动实现直方图匹配(python)
- Android下的串口通信实战之电子秤交互
- 医学流体力学血流动力学仿真模拟计算及临床应用
- logstash 日志收集
- php 上传图片 裁剪,thinkphp_图片上传裁剪功能_已迁移
- 电驴瘫痪网友纷纷“哀悼” 官网称线路故障10日恢复
- SIFT算法原理(2)-极值点的精确定位
- 流程图设计教程和参考样例