洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
4093 EZ的间谍网络
时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold
题目描述
由于外国间谍的大量渗入,国家安全正处于高度的危机之中。如果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】
- 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
- 3
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<stack>
- using namespace std;
- #define maxn 20000+5
- const int INF=1e9;
- int n,m,cz,tot,head[maxn],dfn[maxn],low[maxn],p[maxn];
- int belong[maxn],cur,visx,ru[maxn],smon[maxn];
- bool exist[maxn];
- stack<int>st;
- struct Edge{
- int to,next;
- }e[+];
- void Add_Edge(int u,int v){
- e[++tot].to=v;e[tot].next=head[u];
- head[u]=tot;
- }
- void Tarjan(int u){
- dfn[u]=low[u]=++visx;
- st.push(u);exist[u]=true;
- for(int i=head[u];i;i=e[i].next){
- int v=e[i].to;
- if(dfn[v]==){
- Tarjan(v);
- low[u]=min(low[u],low[v]);
- }
- else if(exist[v])low[u]=min(dfn[v],low[u]);
- }
- int x;
- if(low[u]==dfn[u]){
- smon[u]=;
- do{
- x=st.top();st.pop();exist[x]=false;
- belong[x]=u;
- smon[u]=min(smon[u],p[x]);
- // 对于一个环 只收买 代价最少的那个人即可
- }while(x!=u);
- }
- }
- int totvis=,vis[maxn];
- void DFS(int x){
- if(vis[x])return ;
- vis[x]=;totvis++;
- for(int i=head[x];i;i=e[i].next)
- DFS(e[i].to);
- }
- int main()
- {
- scanf("%d%d",&n,&cz);
- for(int i=;i<=n;i++) p[i]=INF;
- for(int i=,x,y;i<=cz;i++){
- scanf("%d%d",&x,&y);
- p[x]=y;
- }
- scanf("%d",&m);
- for(int i=,x,y;i<=m;i++){
- scanf("%d%d",&x,&y);
- Add_Edge(x,y);
- }
- for(int i=;i<=n;i++)
- if(p[i]!=INF)DFS(i);
- // 从可以收买的人那里深搜 看是否能够得到所有人的情报
- if(totvis<n)
- for(int i=;i<=n;i++)
- if(vis[i]==){
- printf("NO\n%d",i);
- return ;
- }// 处理 NO 的情况
- for(int i=;i<=n;i++)
- if(!dfn[i]&&p[i]!=INF)// p[i] 收买第i个人花p[i]的钱
- Tarjan(i);
- for(int i=;i<=n;i++)
- for(int j=head[i];j;j=e[i].next){
- if(belong[i]!=belong[e[j].to])
- ru[belong[e[j].to]]++;
- }
- int ans=;
- for(int i=;i<=n;i++)
- if(belong[i]==i&&!ru[i])
- ans+=smon[i];
- printf("YES\n%d",ans);
- return ;
- }
- 先来一道省选-,练练手
我在Codevs上总耗时20ms,很不解他为什么时间限制10s
洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络的更多相关文章
- codevs 4093 EZ的间谍网络
时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 由于外国间谍的大量渗入,学校安全正处于高度的危机之中.YJY决定挺身而作出反抗 ...
- 缩点【洛谷P1262】 间谍网络
[洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...
- 【题解】洛谷P1262 间谍网络 (强连通分量缩点)
洛谷P1262:https://www.luogu.org/problemnew/show/P1262 思路 一看题目就知道是强连通分量缩点 当图中有强连通分量时 将其缩点 我们可以用dfn数组判断是 ...
- 洛谷P1395 会议(CODEVS.3029.设置位置)(求树的重心)
To 洛谷.1395 会议 To CODEVS.3029 设置位置 题目描述 有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1.现在村长希望在某个村民家中召开一场会 ...
- 洛谷 P1262 【间谍网络】
题库 : 洛谷 题号 : 1262 题目 : 间谍网络 link : https://www.luogu.org/problemnew/show/P1262 思路 : 这题可以用缩点的思想来做.先用T ...
- 洛谷——P1262 间谍网络
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- 「洛谷P1262」间谍网络 解题报告
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- 洛谷P1262 间谍网络[强连通分量 BFS]
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷 P1262 间谍网络 Label: Kosarajn强联通
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
随机推荐
- rand()和srand()
C++中rand() 函数的用法 1.rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 2.如果你要产生0~99这100个整数中的一个随机整数, ...
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- JZOJ 5809. 【NOIP2008模拟】数羊
5809. [NOIP2008模拟]数羊 (File IO): input:sheep.in output:sheep.out Time Limits: 1000 ms Memory Limits: ...
- JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)
3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Det ...
- 基于django的个人博客网站建立(三)
基于django的个人博客网站建立(三) 前言 网站效果可点击这里访问 今天主要完成的是文章在页面的显示以及评论,留言 具体内容 首先我希望主页面是显示我的所有文章,于是在主页面的视图函数中返回了所有 ...
- UVA - 10213 How Many Pieces of Land?(欧拉公式 + 高精度)
圆上有n个点,位置不确定.问这些点两两连接成的线段,最多可以把圆划分成多少块平面? 欧拉公式:V-E+F = 2,V是点数,E是边数,F是面数. 答案是F=C(n,4)+C(n,2)+1,看的别人推的 ...
- RDD算子、RDD依赖关系
RDD:弹性分布式数据集, 是分布式内存的一个抽象概念 RDD:1.一个分区的集合, 2.是计算每个分区的函数 , 3.RDD之间有依赖关系 4.一个对于key-value的RDD的Partit ...
- redis 之相关命令
为什么缓存数据库更要首选redis?如何使用redis? 一.使用缓存数据库为什么首选用redis? 我们都知道,把一些热数据存到缓存中可以极大的提高速度,那么问题来了,是用Redis好还是Memca ...
- loj2063 「HAOI2016」字符合并
ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- IOS开发---菜鸟学习之路--(十一)-使新闻内容自适应高度
上一章当中,我们留了一个小BUG. 其实就是浏览新闻的时候,如果文字内容过长的花,UITextView 会有个下拉框,而最底层的UIScrollView也有个下拉框,那么在使用的时候就会非常的不爽. ...