时间限制: 10 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

由于外国间谍的大量渗入,学校安全正处于高度的危机之中。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

数据范围及提示 Data Size & Hint

各个测试点1s

友情提示:请先膜拜下万能的YJY再做呦^_^

tarjan缩点

入度为0的是一定可以被控制的

这么写居然不会编译错误。。害得我找了好久

instack[x]-true;

屠龙宝刀点击就送

#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#define N 6005using namespace std;
vector<int>G[N];
bool f,instack[N];
int n,p,r,cnt,tim,top,sumcol,mn[N],mm[N],rd[N],to[N<<1],col[N],sum[N],mc[N],low[N],dfn[N],stack[N],head[N],nextt[N<<1];
inline int min(int a,int b) {return a>b?b:a;}
void tarjan(int x)
{low[x]=dfn[x]=++tim;stack[++top]=x;instack[x]=true;for(int i=head[x];i;i=nextt[i]){int v=to[i];if(!dfn[v]){tarjan(v);low[x]=min(low[x],low[v]);}else if(instack[v]) low[x]=min(low[x],dfn[v]);}if(low[x]==dfn[x]){int k;sumcol++;do{k=stack[top--];instack[k]=false;col[k]=sumcol;if(mn[k]) mc[sumcol]=min(mc[sumcol],mn[k]);mm[sumcol]=min(mm[sumcol],k);}while(k!=x);}
}
int main(int argc,char *argv[])
{scanf("%d",&n);scanf("%d",&p);for(int num,mnn,i=1;i<=p;++i){scanf("%d%d",&num,&mnn);mn[num]=mnn;}memset(mc,0x3f,sizeof(mc));memset(mm,0x3f,sizeof(mm));scanf("%d",&r);for(int a,b;r--;){scanf("%d%d",&a,&b);nextt[++cnt]=head[a];to[cnt]=b;head[a]=cnt;}for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i);for(int i=1;i<=n;++i){for(int j=head[i];j;j=nextt[j]){int v=to[j];if(col[i]!=col[v]){for(int k=0;k<G[col[i]].size();++k)if(G[col[i]][k]==col[v]) goto flag;G[col[i]].push_back(col[v]); rd[col[v]]++;flag:;}}}int ans=0,ansn=0x7fffffff;for(int i=1;i<=sumcol;++i){if(!rd[i]){if(mc[i]==1061109567){f=1;ansn=min(ansn,mm[i]);}else ans+=mc[i];}}if(f) printf("NO\n%d",ansn);else printf("YES\n%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/ruojisun/p/7679121.html

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

  1. EZ的间谍网络(codevs 4093)

    由于外国间谍的大量渗入,学校安全正处于高度的危机之中.YJY决定挺身而作出反抗.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手 ...

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

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

  3. P1262 间谍网络

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

  4. 洛谷P1262 间谍网络题解

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

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

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

  6. loj10095 间谍网络

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

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

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

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

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

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

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

  10. 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. OpenCV实现遍历文件夹下所有文件
  2. 游戏开发基础:A*算法(转)
  3. 你的代码糟粕比精华要多得多
  4. c语言ut8,C语言使用utlist实现的双向链表
  5. String内存分配
  6. 保驾护航金三银四,万字解析!
  7. Liferay 部署war包时候的deployDirectory 细节分析
  8. synchronized关键字理解
  9. EOS1.1版本新特性介绍
  10. mysqldump对mysql数据库的影响
  11. 百面机器学习——svm基尼系数寻找最优划分
  12. 一秒钟世界上会发生多少事_再多涂改,人性也总会醒来,也总会主动去追寻那一秒钟...
  13. 表单html遇到的问题及处理,HTML表单常见问题
  14. 深度学习神经网络训练调参技巧
  15. 普适计算-2014/03/14
  16. 10秒钟解决TeamViewer商业用途 、5分钟后终止等问题
  17. 这绝对是个高手,一个用 C 开发的图形界面开发库
  18. Exiftool not found metadata operations disabled 索尼相机查如何查快门教程
  19. 【初创期】企业的安全建设之路到底有多难?
  20. 乐普生物通过聆讯:预计年亏10亿 海通证券与阳光人寿是股东

热门文章

  1. 鹏业安装算量图元属性中的扣除标记功能
  2. word排版学习笔记
  3. 柱状图误差线 matlab,matlab柱状图加误差线
  4. labwindows mysql_LabWindows/CVI(二):基本代码框架函数说明
  5. 【OpenGL】斯坦福兔子、显示列表
  6. android 飞行模式 源代码,android 定时进入飞行模式 例子
  7. win+ubuntu双系统卸载ubuntu
  8. 微信支付/支付宝指纹支付原理
  9. MediaRecorder单独录制影像,不录制音频
  10. 网络虚拟化中的 offload 技术:LSO/LRO、GSO/GRO、TSO/UFO、VXLAN