【CodeVS4093】EZ的间谍网络
tarjan缩点,找入度为0的点(可能是一条链的端点或者一个点),入度为0的点必须能被控制。
每个强连通分量中能被控制的点的最小值是缩点后这个点的最小值,入度为0的点的最小值的和就是最小花费。
还要记下每个强连通分量中的最小编号,这些编号中的最小值就是第一个不能被控制的点。
#include<iostream> #include<cstdio> #include<cstring> #define N 3010 using namespace std; struct edge {int to,next; }e[N*2],d[N*2]; int head[N],h[N]; int w[N],W[N]; bool instack[N]; int low[N],dfn[N],stack[N]; int cost[N],MIN[N]; int belong[N],rudu[N]; int Index,scc,cnt,top,r; int n,p,x,y,u,v; void ins(int u,int v) {e[++cnt].to = v; e[cnt].next = head[u]; head[u] = cnt; } void tarjan(int k) {dfn[k] = low[k] = ++Index;stack[++top] = k;instack[k] = true;for (int i=head[k];i;i = e[i].next){int v = e[i].to;if (instack[v])low[k] = min(low[k],dfn[v]);else if (!dfn[v]){tarjan(v);low[k] = min(low[k],low[v]);}}if (dfn[k] == low[k]){scc++;int now = 0;while (now != k){now = stack[top--];belong[now] = scc;instack[now] = false;if (w[now]) {W[scc] = min(W[scc],w[now]);}MIN[scc] = min(MIN[scc],now);}} } int main() {memset(W,127,sizeof(W));memset(MIN,127,sizeof(MIN));scanf("%d%d",&n,&p);for (int i=1;i<=p;i++){scanf("%d%d",&x,&y);w[x] = y;}scanf("%d",&r);for (int i=1;i<=r;i++){scanf("%d%d",&u,&v);ins(u,v);}for (int i=1;i<=n;i++)if (!dfn[i])tarjan(i);cnt = 0;for (int i=1;i<=n;i++){for (int j = head[i];j;j = e[j].next){int v = e[j].to;if (belong[i] != belong[v]){d[++cnt].to = belong[v];d[cnt].next = h[belong[i]];h[belong[i]] = ++cnt;rudu[belong[v]] ++;}}}int pd=0,failmin=6666666,ans = 0;for (int i=1;i<=scc;i++){if (rudu[i] == 0){if (W[i] == 2139062143){pd = 1;failmin = min(failmin,MIN[i]);}ans += W[i];}}if (pd == 1){printf("NO\n");printf("%d",failmin);return 0;}printf("YES\n%d",ans); }
转载于:https://www.cnblogs.com/liumengyue/p/5598517.html
【CodeVS4093】EZ的间谍网络相关推荐
- EZ的间谍网络(codevs 4093)
由于外国间谍的大量渗入,学校安全正处于高度的危机之中.YJY决定挺身而作出反抗.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手 ...
- 缩点【洛谷P1262】 间谍网络
[洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...
- P1262 间谍网络
传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) ...
- 洛谷P1262 间谍网络题解
洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...
- Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925
题目传送门 真是一道好题呀~~~~qwq 知道这题是tarjan,但是想了很久怎么用上强连通分量.因为样例们...它显然并不是一个强联通分量! (被样例迷惑的最好例子) 然后...就没有然后了...感 ...
- loj10095 间谍网络
题目描述 由于外国间谍的大量渗入,国家安全正处于高度危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍接受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报. ...
- P1262_美帝的间谍网络被我部捕获!
题面 这道题太神了吧,从昨晚七点半做到今天下午两点. 我经历了以下折腾(以下内容可跳过): 一开始想的是用Tarjan缩点,然后以可以被收买的间谍为起点跑最短路,通过路径染色,让一条路径上的点的权值等 ...
- P1262 间谍网络 (tarjan缩点 水过去)
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷1262 间谍网络 tarjan缩点
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 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 ...
最新文章
- 关键任务应用程序依赖于故障保护存储器
- ProcessDialogKey 方法实现回车自动换行
- (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device【转】
- boost : has_to_string的用法测试程序
- docker - 在centos7和windows10安装
- JAVA取钱多线程实验_JAVA多线程----用--取钱问题2
- Linux中cp和scp命令的使用方法和区别
- 2008r2文件服务器高可用,Windows Server 2012 R2 文件服务器安装与配置07 之文件服务器高可用配置DFS...
- mysql 5.6批处理慢_java – JDBC批处理执行速度极慢
- C 语言是“最环保”的编程语言
- 计算机网络第七版答案
- 【PTA L1-028】判断素数 开方判断质数
- 视频编解码基本概念之 GOP
- 07——Vue 中的事件处理 以及 事件修饰符 、键盘事件
- 用Python画圣诞树
- 最小二乘法(Least square method)
- 监控POE供电交换机最大传输距离有多远?
- GAN网络概述及LOSS函数详解
- js实现点击图片放大效果,以及懒加载图片
- 东北大学软件学院操作系统机考选择题库