题目

我们首先考虑该题没有环应该怎么做,因为没有环所以是一个DAG,因此直接加上入度为0的罪犯,而有环则可以缩点,之后就成为了DAG,然后用一方法做就好了。

\(Code\)

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. int n, p, r, top, point, cnt, color, ans, belong[100100], stack[100100], lin[100100], low[100010], dfn[100100], data[100100], vis[100100], minn[100010], in[100100];
  8. // 共有几个间谍, 被收买的间谍的值,
  9. struct edge {
  10. int from, to, nex;
  11. }e[100100];
  12. inline void add(int f, int t)
  13. {
  14. e[++cnt].from = f;
  15. e[cnt].to = t;
  16. e[cnt].nex = lin[f];
  17. lin[f] = cnt;
  18. }
  19. void tarjan(int u)
  20. {
  21. low[u] = dfn[u] = ++point;
  22. stack[++top] = u;
  23. vis[u] = 1;
  24. for(int i = lin[u]; i; i = e[i].nex)
  25. {
  26. int v = e[i].to;
  27. if(!dfn[v]) tarjan(v), low[u] = min(low[u],low[v]);
  28. else if(vis[v]) low[u] = min(low[u],dfn[v]);
  29. }
  30. if(low[u] == dfn[u])
  31. {
  32. color++;
  33. int v = 0;
  34. while(v != u)
  35. {
  36. v = stack[top--];
  37. vis[v] = 0;
  38. belong[v] = color;
  39. minn[color] = min(minn[color], data[v]);
  40. }
  41. }
  42. }
  43. int main()
  44. {
  45. scanf("%d%d", &n, &p);
  46. for (int i = 1; i <= n; i++)
  47. data[i] = 2147483647, minn[i] = 2147483647;
  48. for (int i = 1; i <= p; i++)
  49. {
  50. int a, b;
  51. scanf("%d%d", &a, &b);
  52. data[a] = b;
  53. }
  54. scanf("%d", &r);
  55. for (int i = 1; i <= r; i++)
  56. {
  57. int a, b;
  58. scanf("%d%d", &a, &b);
  59. add(a, b);
  60. }
  61. for (int i = 1; i <= n; i++)
  62. if (!dfn[i] && data[i] != 2147483647) tarjan(i);
  63. for (int i = 1; i <= n; i++)
  64. if (!dfn[i])
  65. printf("NO\n%d", i), exit(0);
  66. printf("YES\n");
  67. for (int cur = 1; cur <= n; cur++)
  68. for (int i = lin[cur]; i; i = e[i].nex)
  69. {
  70. int to = e[i].to;
  71. if (belong[cur] != belong[to])
  72. in[belong[to]]++;
  73. }
  74. for (int i = 1; i <= color; i++)
  75. if (!in[i])
  76. ans += minn[i];
  77. printf("%d", ans);
  78. }

洛谷P1262间谍网络的更多相关文章

  1. 【题解】洛谷P1262 间谍网络 (强连通分量缩点)

    洛谷P1262:https://www.luogu.org/problemnew/show/P1262 思路 一看题目就知道是强连通分量缩点 当图中有强连通分量时 将其缩点 我们可以用dfn数组判断是 ...

  2. 洛谷——P1262 间谍网络

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

  3. 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络

    4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...

  4. 洛谷P1262 间谍网络[强连通分量 BFS]

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

  5. 洛谷 P1262 间谍网络 Label: Kosarajn强联通

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

  6. 洛谷P1262 间谍网络

    本来只想刷道小题,没想到还有点麻烦 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美 ...

  7. 洛谷 P1262 间谍网络 —— 缩点

    题目:https://www.luogu.org/problemnew/show/P1262 首先,一个强连通分量里有一个点被控制则所有点都被控制,所以先 tarjan 缩点,记一下每个连通块中能被收 ...

  8. 洛谷—— P1262 间谍网络

    https://www.luogu.org/problem/show?pid=1262 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A ...

  9. 洛谷 P1262 间谍网络

    传送门 题目大意:A能揭发B,B能揭发C..某些人可以被收买,如果收买A,那么A,B,C..的情报都可以得到. 求能否得到所有情报,如果可以最少花费多少钱去收买. 题解:tajian缩点 dfs/bf ...

随机推荐

  1. TS学习随笔(三)->接口

    终于来到了比较重要的知识,接口,有多重要呢,反正是很重要好啵 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 那什么是接口呢,在面向对象语言中,接口(Interf ...

  2. 无依赖简单易用的Dynamics 365公共视图克隆工具

    本人微信公众号:微软动态CRM专家罗勇 ,回复279或者20180818可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dy ...

  3. Windows2012R2 NTP时间同步

    Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时间,需要使用另外的方式去做时间同步 下面分两个情况 两个情况,两个情况都需要用修改组策略的方式来做 情况 ...

  4. FFmpeg AVPacket相关主要函数介绍

    1.AVPacket相关函数介绍 操作AVPacket的函数大约有30个,主要分为:AVPacket的创建初始化,AVPacket中的data数据管理(clone,free,copy),AVPacke ...

  5. c/c++ linux 进程间通信系列5,使用信号量

    linux 进程间通信系列5,使用信号量 信号量的工作原理: 由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的: P(sv):如果sv的值大于零,就给它减1:如果 ...

  6. 使用jquery实现选项卡切换效果

    几张简陋的框架效果图 页面加载时: 选项卡操作后: css样式: <style type="text/css"> *{margin:0px;padding:0px;} ...

  7. linux 硬盘满了如何处理(转)

    linux 硬盘满了如何处理 事件源于在服务器运行一个脚本程序… 好好的脚本突然报错,还以为脚本出现问题了.细看报错原因(具体报错信息已经忘记了),是没有可用空间.从没遇见过这个情况,怎么办呢? 一. ...

  8. 重装助手教你如何禁用Windows 10快速启动

    快速启动是首先在Windows 8中实现并延续到Windows 10的功能,可在启动PC时提供更快的启动时间.它是一个方便的功能,也是大多数人在不知情的情况下使用的功能,但还有一些功能会在他们掌握新P ...

  9. JavaScript对象类型之创建对象

    引言 JavaScript中,可以通过对象直接量,关键字new(ECMAScript 5中的)Object.create(),函数来创建对象. 对象直接量 JavaScript中使用对象直接量来创建对 ...

  10. Java操作Excel(使用POI)

    背景说明 以前写过使用 JXL 操作Excel的例子,但JXL对于Excel 2007版本以后的文件(即扩展名为 .xlsx)无法读取,也找不到可以支持的包.所以,有时不得不用 POI 来操作Exce ...