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的间谍网络相关推荐

  1. EZ的间谍网络(codevs 4093)

    由于外国间谍的大量渗入,学校安全正处于高度的危机之中.YJY决定挺身而作出反抗.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手 ...

  2. 缩点【洛谷P1262】 间谍网络

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

  3. P1262 间谍网络

    传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) ...

  4. 洛谷P1262 间谍网络题解

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

  5. Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925

    题目传送门 真是一道好题呀~~~~qwq 知道这题是tarjan,但是想了很久怎么用上强连通分量.因为样例们...它显然并不是一个强联通分量! (被样例迷惑的最好例子) 然后...就没有然后了...感 ...

  6. loj10095 间谍网络

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

  7. P1262_美帝的间谍网络被我部捕获!

    题面 这道题太神了吧,从昨晚七点半做到今天下午两点. 我经历了以下折腾(以下内容可跳过): 一开始想的是用Tarjan缩点,然后以可以被收买的间谍为起点跑最短路,通过路径染色,让一条路径上的点的权值等 ...

  8. P1262 间谍网络 (tarjan缩点 水过去)

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

  9. 洛谷1262 间谍网络 tarjan缩点

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

  10. 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 ...

最新文章

  1. 关键任务应用程序依赖于故障保护存储器
  2. ProcessDialogKey 方法实现回车自动换行
  3. (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device【转】
  4. boost : has_to_string的用法测试程序
  5. docker - 在centos7和windows10安装
  6. JAVA取钱多线程实验_JAVA多线程----用--取钱问题2
  7. Linux中cp和scp命令的使用方法和区别
  8. 2008r2文件服务器高可用,Windows Server 2012 R2 文件服务器安装与配置07 之文件服务器高可用配置DFS...
  9. mysql 5.6批处理慢_java – JDBC批处理执行速度极慢
  10. C 语言是“最环保”的编程语言
  11. 计算机网络第七版答案
  12. 【PTA L1-028】判断素数 开方判断质数
  13. 视频编解码基本概念之 GOP
  14. 07——Vue 中的事件处理 以及 事件修饰符 、键盘事件
  15. 用Python画圣诞树
  16. 最小二乘法(Least square method)
  17. 监控POE供电交换机最大传输距离有多远?
  18. GAN网络概述及LOSS函数详解
  19. js实现点击图片放大效果,以及懒加载图片
  20. 东北大学软件学院操作系统机考选择题库

热门文章

  1. Letex排版学习笔记
  2. 这届年轻人,为什么越挣钱越穷?
  3. 华为er路由器设置虚拟服务器,华为AR111-S路由器双线路策略路由配置笔记
  4. Boost电路的参数设计
  5. 微信公众号里面服务器配置关闭,微信公众号服务器配置无法修改
  6. Python语言程序设计基础-题库
  7. win10 cmd窗口切换目录并运行python代码
  8. Power Switching ----- Controlling power for power shutoff
  9. win10服务器文件夹显示不全,Win10系统文件/文件夹图标显示不正常的解决方法
  10. nps内网端口映射,含(p2p配置方法)