题目描述

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

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

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

输入输出格式

输入格式:

第一行只有一个整数n。

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

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

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

输出格式:

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

输入样例#1:

【样例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:

【样例1】

YES

110

【样例2】

NO

题解:在一个有向图里,有一些点可以被选取,问选取的点是否能遍历整个图,并使代价最小。显然图里会出现一些环,即强联通分量。在一个强联通分量里,只要一个被选取了,其他的都可以被遍历到。于是可以转换成求强联通分量。将一个强联通分量缩成一个点,点权即强联通分量里能被收买的最小的值。枚举每一条边,当边上的两点不属于同一个强联通分量时将这两个强联通分量连起来。因为所有点都要遍历到,最后选取所有入度为0的点即可。

constmaxn=10000;maxm=20000;
varedge:array[0..maxm,1..2]of int64;last,next:array[0..maxn]of int64;a,du:array[0..maxn]of int64;n,m,p,sum,tot,i,j:longint;ini,low,dfn,sta:array[0..maxn]of int64;dep,px,py,ans:longint;bel,va,f:array[0..maxn]of int64;procedure add(x,y:longint);
begininc(sum);edge[sum,1]:=x;edge[sum,2]:=y;next[sum]:=last[x];last[x]:=sum;
end;procedure init;
vari,x,y:longint;
beginreadln(n);readln(p);for i:=1 to p dobeginread(x);readln(a[x]);end;readln(m);for i:=1 to m dobeginreadln(x,y);add(x,y);end;
end;function min(a,b:longint):longint;
beginif a<b then exit(a) else exit(b);
end;procedure tarjan(x:longint);
vari,pp,py:longint;
begininc(dep);dfn[x]:=dep;low[x]:=dep;inc(sta[0]);sta[sta[0]]:=x;ini[x]:=1;i:=last[x];py:=edge[i,2];while i<>0 dobeginif dfn[py]=0 thenbegintarjan(py);low[x]:=min(low[x],low[py]);endelseif ini[py]=1 then low[x]:=min(low[x],dfn[py]);i:=next[i];end;if low[x]=dfn[x] thenbeginpp:=0;inc(tot);va[tot]:=maxlongint;while pp<>x dobeginpp:=sta[sta[0]];bel[pp]:=tot;if a[pp]>0 then va[tot]:=min(va[tot],a[pp]);dec(sta[0]);ini[pp]:=0;//  if sta[0]=0 then break;end;end;
end;procedure failed;
vari,j:longint;
beginfor j:=1 to n doif a[j]>0 thenbeginf[j]:=1;i:=last[j];while i<>0 dobeginf[edge[i,2]]:=1;i:=next[i];end;end;
end;begininit;for i:=1 to n doif dfn[i]=0 then tarjan(i);for i:=1 to m dobeginpx:=edge[i,1];py:=edge[i,2];if bel[px]<>bel[py] then inc(du[bel[py]]);end;for i:=1 to tot dobeginif (du[i]=0)and(va[i]=maxlongint) thenbeginfailed;for j:=1 to n doif f[j]=0 thenbeginwriteln('NO');writeln(j);halt;end;end;if du[i]=0 then inc(ans,va[i]);end;writeln('YES');writeln(ans);
end.

洛谷1262 间谍网络 tarjan缩点相关推荐

  1. 洛谷P1262 间谍网络题解

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

  2. 洛谷P1262 间谍网络

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

  3. (Tarjan)洛谷P3387【模板】缩点

    洛谷P3387[模板]缩点 思路: 虽然是缩点模板题,但是明显感觉比同一个题单中的其他题都难. 题目思路已经提供给你:Tarjan缩点+DAGdp.就是用Tarjan缩点,重新建图之后,边拓扑排序边建 ...

  4. 洛谷 P3387 【模板】缩点 tarjan 虚拟头节点和虚拟尾节点

    题目链接: https://www.luogu.org/problem/P3387 一:ac思路 参考博客: https://www.luogu.org/blog/wyz598085788/solut ...

  5. 洛谷 P3387 【模板】缩点 (tarjan)

    展开 题目背景 缩点+DP 题目描述 给定一个 nn 个点 mm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重 ...

  6. [洛谷P3387]【模板】缩点

    题目大意:给定一个$n$个点$m$条边有向图,第$i$个点有权值$w_i$,求一条路径,使路径经过的点权值之和最大,输出点权和,(多次经过一个点只算一次点权) 题解:$tarjan$缩点+$DP$ 卡 ...

  7. 洛谷 P3387 【模板】缩点

    题目 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点, ...

  8. 洛谷P3387 【模板】缩点 题解

    题目来源: https://www.luogu.org/problemnew/show/P3387 题目描述: 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径 ...

  9. 洛谷—P3387 【模板】缩点

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

最新文章

  1. Attempt to present vc on vc which is already presenting vc/(null)
  2. ERP failure: Error when opening an RFC connection
  3. OnClickListener冲突的问题
  4. php 清空一个数组_php如何删除一个数组
  5. xml层级工具_.NET的类型层次查看工具,ClassHierarchyViewer,0.3.0.1
  6. android 开发环境以及hello world,Android Studio开发环境搭建和HelloWorld
  7. Linux发邮件之mail命令
  8. 【华为云技术分享】数据管理服务DAS 之 数据库自动化运维功能展播4:慢SQL
  9. Java安全 – JCE (Blowfish算法报错)
  10. 详实!DevOps 最新现状研究报告解读 | 原力计划
  11. android ImageSwitcher案例
  12. 【EduCoder实训答案】JSP入门
  13. 桌面窗口管理器占用过高解决办法
  14. beacon帧主要结构
  15. 多喝牛奶少吃糖 正确饮食摆脱经前综合征
  16. 11g中hanganalyze的格式
  17. c++在csv写入汉字_python-opencv表格识别转csv
  18. rancher发布应用_Rancher 上线应用商店的基本流程
  19. NBU(NetBackup)备份vmware虚拟机
  20. CVPR 2022 | SwinTextSpotter:基于文本检测与识别更好协同的场景文本识别

热门文章

  1. Vue中分页组件的用法
  2. krpano 实现小行星加载完成再显示所有的热点
  3. 检查xml写的格式是否正确的方法
  4. Windows注册表知识
  5. 抽卡游戏的随机机制(转载)
  6. OSChina 周三乱弹 ——用程序员思维找妹子
  7. 哈希表的概念(散列表)
  8. C:谈谈内存分配中的(.data)段和(.bss)段的区别?为什么要分.data段和.bss段?
  9. 网络在线电视专家 v7.27 怎么用
  10. CentOS无人值守安装