TYVJ P1153 间谍网络
描述
我们的反间谍机关提供了一份资料,包括所有已知的受贿的间谍,以及他们愿意收受的具体数额。同时我们还知道哪些间谍手中具体掌握了哪些间谍的资料。假设总共有n个间谍(n不超过3000),每个间谍分别用1到3000的整数来标识。
请根据这份资料,判断我们是否可能控制全部的间谍,如果可以,求出我们所需要支付的最少资金。否则,输出不能被控制的一个间谍。
输入格式
第二行是整数p。表示愿意被收买的人数,1<=p<=n。
接下来的p行,每行有两个整数,第一个数是一个愿意被收买的间谍的编号,第二个数表示他将会被收买的数额。这个数额不超过20000.
紧跟着一行只有一个整数r,1<=r<=8000。然后r行,每行两个正整数,表示数对(A,B),A间谍掌握B间谍的证据。
输出格式
测试样例1
输入
2
1
2 512
2
1 2
2 1
输出
YES
512
解题:强连通缩点,看看入度为0 的强连通块中哪个最小选哪个。。。
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
const int INF = 0x3f3f3f3f;
struct arc {
int to,next;
arc(int x = ,int y = -) {
to = x;
next = y;
}
} e[];
int head[maxn],dfn[maxn],low[maxn],belong[maxn];
int minV[maxn],value[maxn],in[maxn],tot,idx,scc,n,m;
bool instack[maxn];
stack<int>stk;
void init() {
for(int i = ; i < maxn; ++i) {
dfn[i] = low[i] = head[i] = -;
instack[i] = false;
minV[i] = value[i] = INF;
in[i] = belong[i] = ;
}
tot = scc = idx = ;
while(!stk.empty()) stk.pop();
}
void add(int u,int v) {
e[tot] = arc(v,head[u]);
head[u] = tot++;
}
void tarjan(int u) {
dfn[u] = low[u] = ++idx;
instack[u] = true;
stk.push(u);
for(int i = head[u]; ~i; i = e[i].next) {
if(dfn[e[i].to] == -) {
tarjan(e[i].to);
low[u] = min(low[u],low[e[i].to]);
} else if(instack[e[i].to]) low[u] = min(low[u],dfn[e[i].to]);
}
if(low[u] == dfn[u]) {
scc++;
int v;
do {
instack[v = stk.top()] = false;
stk.pop();
belong[v] = scc;
} while(v != u);
}
}
int main() {
int u,v,w;
while(~scanf("%d",&n)) {
init();
scanf("%d",&m);
for(int i = ; i <= m; ++i) {
scanf("%d %d",&u,&w);
value[u] = w;
}
scanf("%d",&m);
while(m--) {
scanf("%d %d",&u,&v);
add(u,v);
}
for(int i = ; i <= n; ++i)
if(dfn[i] == -) tarjan(i);
int ans = ;
for(int i = ; i <= n; ++i) {
minV[belong[i]] = min(minV[belong[i]],value[i]);
for(int j = head[i]; ~j; j = e[j].next) {
if(belong[i] != belong[e[j].to]) in[belong[e[j].to]]++;
minV[belong[e[j].to]] = min(minV[belong[e[j].to]],value[e[j].to]);
}
}
for(int i = ; i <= scc; ++i)
if(!in[i]) {
if(minV[i] == INF) {
ans = INF;
break;
}
ans += minV[i];
}
if(ans < INF) printf("%s\n%d\n","YES",ans);
else{
for(int i = ; i <= n; ++i)
if(in[belong[i]] == && minV[belong[i]] == INF && value[i] == INF){
ans = i;
break;
}
printf("%s\n%d\n","NO",ans);
}
}
return ;
}
TYVJ P1153 间谍网络的更多相关文章
- tyvj 1153 间谍网络 tarjan有向图强连通
P1153 - 间谍网络 From ForeverBell Normal (OI)总时限:13s 内存限制:128MB 代码长度限制:64KB 描述 Description 由于外国 ...
- Luogu P2002 消息扩散&&P1262 间谍网络
怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个 ...
- P1262 间谍网络
传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) ...
- 缩点【洛谷P1262】 间谍网络
[洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...
- 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...
- 洛谷——P1262 间谍网络
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- 洛谷 P1262 【间谍网络】
题库 : 洛谷 题号 : 1262 题目 : 间谍网络 link : https://www.luogu.org/problemnew/show/P1262 思路 : 这题可以用缩点的思想来做.先用T ...
- 【JZOJ 3910】Idiot 的间谍网络
题面: Description 作为一名高级特工,Idiot 苦心经营多年,终于在敌国建立起一张共有n 名特工的庞大间谍网络. 当然,出于保密性的要求,间谍网络中的每名特工最多只会有一名直接领导.现在 ...
- 「洛谷P1262」间谍网络 解题报告
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
随机推荐
- Ubuntu下Matlab代码中中文注释乱码解决方案
环境:Ubuntu18.04,Matlab R2017b. 把matlab文件从windows拷贝到Ubuntu中,打开发现原先的中文注释全部乱码.真正原因是因为windows中.m文件采用的是gbk ...
- linux 下查看二进制文件
查看二进制有以下几种方法: 方法一:hexdump apt-get install libdata-hexdumper-perl 安装好之后就可以直接hexdump your_binary_file ...
- Unix网络编程之环境搭建
环境搭建 在尝试UNP书上的样例时,会由于找不到"unp.h"等问题无法编译成功.因此在学习之前须要先搭建好编译环境. 步骤 <1>下载 UNIX网络编程源码unpv ...
- iOS 7 UI 过渡指南 - 支持续 iOS 6(iOS 7 UI Transition Guide - Supporting iOS 6)
iOS 7 UI Transition Guide Preparing for Transition Before You Start Scoping the Project Supporting i ...
- Gitblit从一个服务器,迁移到另外一个服务器
http://gitblit.com/federation.html A Gitblit federation is a mechanism to clone repositories and kee ...
- 【Linux】JDK+Eclipse 搭建C/C++开发环境
注:本文所提供的参考示例是在CentOS Linux环境下的安装,不保证适用于其他版本的Linux系统. · 安装前的注意事项 编译源代码是需要对应的代码编译工具的,本文中安装的Eclipse只 ...
- Python列表插入字典(转)
https://blog.csdn.net/qq_29721419/article/details/70310183
- 负载均衡-lvs
常用的负载均衡技术比较DNS 轮询DNS本身的机制不再赘述,这里主要看一看基于DNS的负载均衡,其大致原理很清楚,DNS系统本身支持同一个域名映射到多个ip (A记录),例如 这样每次向DNS系统询问 ...
- org.w3c.dom.Document 与org.dom4j.Document互转
public static Document parse(org.w3c.dom.Document doc) throws Exception { if (doc == null) { return ...
- JSP中 input type 用法
JSP中 input type 用法 Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=te ...