洛谷 1262 间谍网络 Tarjan 图论
#洛谷 1262 图论 tarjan
并不感觉把这道题目放在图的遍历中很合适,虽然思路比较简单但是代码还是有点多的,,
将可收买的间谍的cost值设为它的价格,不可购买的设为inf,按照控制关系连图,Tarjan缩点,得到的新图中,入度为0的点是必须购买的,如果这些点中存在inf,则不成立
#include <cstdio>
#include <algorithm>
#include <cstring>
const int inf = 0x3f3f3f3f;
const int maxn = (3000 + 500) * 2;
const int maxm = 50000;
int dfn[maxn], low[maxn], vis[maxn];
int sta[maxn];
int stackTop = 0;
int tim = 0;
int cost[maxn];
int costNew[maxn];
int from[maxn];
int cur = 0;
int indo[maxn];
int outdo[maxn];
int n, p, r;
int x, y;
int last[maxm], other[maxm], pre[maxm];
int totEdge = 0;
void add(int x, int y) {
totEdge++;
pre[totEdge] = last[x];
last[x] = totEdge;
other[totEdge] = y;
}
void tarjan(int x) {
tim++;
dfn[x] = low[x] = tim;
vis[x] = 1;
stackTop++;
sta[stackTop] = x;
for (int p = last[x]; p; p = pre[p]) {
int q = other[p];
if (!dfn[q]) {
tarjan(q);
low[x] = std :: min(low[x], low[q]);
} else if (vis[q]) {
low[x] = std :: min(low[x], dfn[q]);
}
}
if (dfn[x] == low[x]) {
cur++;
costNew[cur] = inf;
while (sta[stackTop] != x) {
vis[sta[stackTop]] = 0;
from[sta[stackTop]] = cur;
costNew[cur] = std :: min(costNew[cur], cost[sta[stackTop]]);
stackTop--;
}
vis[x] = 0;
from[x] = cur;
costNew[cur] = std :: min(costNew[cur], cost[x]);
stackTop--;
}
}
int main () {
scanf("%d", &n);
scanf("%d", &p);
for (int i = 1; i <= p; i++) {
scanf("%d", &x);
scanf("%d", &cost[x]);
}
for (int i = 1; i <= n; i++)
if (cost[i] == 0) cost[i] = inf;
scanf("%d", &r);
while (r--) {
scanf("%d %d", &x, &y);
add(x, y);
}
for (int i = 1; i <= n; i++) {
if (!dfn[i]) tarjan(i);
}
for (int i = 1; i <= n; i++)
for (int j = last[i]; j; j = pre[j]) {
int q = other[j];
if (from[i] != from[q]) {
indo[from[q]]++;
outdo[from[i]]++;
}
}
long long ans = 0;
bool flag = 0;
for (int i = 1; i <= cur; i++) {
if (indo[i] == 0) {
if (costNew[i] == inf) {
flag = 1;
break;
} else {
ans += costNew[i];
}
}
}
if (!flag) {
printf("YES\n%lld\n", ans);
} else {
printf("NO\n");
for (int i = 1; i <= n; i++) {
if (indo[from[i]] == 0 && costNew[from[i]] == inf) {
printf("%d", i);
break;
}
}
}
return 0;
}
洛谷 1262 间谍网络 Tarjan 图论的更多相关文章
- 【题解】洛谷P1262 间谍网络 (强连通分量缩点)
洛谷P1262:https://www.luogu.org/problemnew/show/P1262 思路 一看题目就知道是强连通分量缩点 当图中有强连通分量时 将其缩点 我们可以用dfn数组判断是 ...
- 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...
- 洛谷——P1262 间谍网络
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- 洛谷P1262 间谍网络[强连通分量 BFS]
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷P1262 间谍网络
本来只想刷道小题,没想到还有点麻烦 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美 ...
- 洛谷P1262间谍网络
题目 我们首先考虑该题没有环应该怎么做,因为没有环所以是一个DAG,因此直接加上入度为0的罪犯,而有环则可以缩点,之后就成为了DAG,然后用一方法做就好了. \(Code\) #include < ...
- 洛谷—— P1262 间谍网络
https://www.luogu.org/problem/show?pid=1262 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A ...
- 洛谷 P1262 间谍网络 Label: Kosarajn强联通
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷 P1262 间谍网络
传送门 题目大意:A能揭发B,B能揭发C..某些人可以被收买,如果收买A,那么A,B,C..的情报都可以得到. 求能否得到所有情报,如果可以最少花费多少钱去收买. 题解:tajian缩点 dfs/bf ...
随机推荐
- 【cl】selenium实例一:打开百度,获取第四个标题
/*创建类的时候是TestNG Class*/ package Selenium_lassen; import static org.junit.Assert.*; import java.util. ...
- jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo
近期在论坛中看到.在使用html5中上传图片或文件,出现各种问题. 这一方面,我也一直没有做过,今天就抽出了一点时间来学习一下.如今的演示样例已经ok了,我就给大家分享一下,希望对大家有帮助. 好吧. ...
- Codeforces Round #349 (Div. 2) C. Reberland Linguistics DP+set
C. Reberland Linguistics First-rate specialists graduate from Berland State Institute of Peace a ...
- iOS- "unacceptable content-type: text/plain"等content-type bug解决方式
常常在使用AFN的时候会出现content-type错误,缺少请求类型,比方"unacceptable content-type: text/plain" 解决方法: 1.在网络请 ...
- POJ3204 Ikki's Story - Road Reconstruction 网络流图的关键割边
题目大意:一个有源有汇的城市,问最少增加城市中的多少道路可以增加源到汇上各个路径上可容纳的总车流量增加. 网络流关键割边集合指如果该边的容量增加,整个网络流图中的任意从原点到汇点的路径的流量便可增加. ...
- Java 异步转同步 ListenableFuture in Guava
ListenableFuture的说明 并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写.出于这样的考虑,Guava 定义了 ListenableFuture接口并继承了JDK c ...
- ES shrink ——一般是结合rollover一起使用的,一开始没有看懂官方shrink文档,当看了这个之后就明白了
rollover Elasticsearch 从 5.0 开始,为日志场景的用户提供了一个很不错的接口,叫 rollover.其作用是:当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引 ...
- 找新朋友(hdoj--1286--欧拉函数)
欢迎参加--每周六晚的BestCoder(有米!) 找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- ZOJ-3988 2017CCPC-秦皇岛 Prime Set 二分图最大匹配 匈牙利
题面 题意:给你n个数,你可以选择2个和为质数的数为一对,每个数可以重复选择,你最多选k对,问你最多能选多少个不同数出来 题解:首先思考怎么样的数和为质数,2个偶数相加不行,除了1+1以外2个奇数相加 ...
- vmware笔试题目
http://discuss.acmcoder.com/topic/58db8e2ebb0f44ba0e94e670 上面是完整的题目,下面一下我自己的想法. http://discuss.acmco ...