洛谷传送门


看着这道题给人感觉就是tarjan求SCC,然而还得判断是否能控制全部间谍,这就得先从可以贿赂的点dfs一遍。

如果没有全部被标记了,就输出NO,再从没被标记的点里找最小的标号。

如果全被标记,就输出YES,再从入度为0的缩点里找最小的价格,加到ans中,最后输出ans。

——代码

  1. #include <cstdio>
  2. #include <stack>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int n, p, r1, cnt, idx, ans = , minn;
  8. int a[], next[], to[], head[], low[], dfn[], belong[], r[];
  9. bool ins[], vis[], mey[];
  10. stack <int> s;
  11.  
  12. inline void add(int x, int y)
  13. {
  14. to[cnt] = y;
  15. next[cnt] = head[x];
  16. head[x] = cnt++;
  17. }
  18.  
  19. void dfs(int u)
  20. {
  21. int i, v;
  22. vis[u] = ;
  23. mey[u] = ;
  24. for(i = head[u]; i != -; i = next[i])
  25. {
  26. v = to[i];
  27. if(!vis[v]) dfs(v);
  28. }
  29. }
  30.  
  31. void tarjan(int u)
  32. {
  33. low[u] = dfn[u] = ++idx;
  34. s.push(u);
  35. ins[u] = ;
  36. int i, v;
  37. for(i = head[u]; i != -; i = next[i])
  38. {
  39. v = to[i];
  40. if(!dfn[v])
  41. {
  42. tarjan(v);
  43. low[u] = min(low[u], low[v]);
  44. }
  45. else if(ins[v]) low[u] = min(low[u], dfn[v]);
  46. }
  47. if(low[u] == dfn[u])
  48. {
  49. cnt++;
  50. do
  51. {
  52. v = s.top();
  53. s.pop();
  54. ins[v] = ;
  55. belong[v] = cnt;
  56. }while(u != v);
  57. }
  58. }
  59.  
  60. int main()
  61. {
  62. int i, j, k, x, y, u, v;
  63. scanf("%d %d", &n, &p);
  64. for(i = ; i <= p; i++)
  65. {
  66. scanf("%d", &x);
  67. scanf("%d", &a[x]);
  68. }
  69. memset(head, -, sizeof(head));
  70. scanf("%d", &r1);
  71. for(i = ; i <= r1; i++)
  72. {
  73. scanf("%d %d", &x, &y);
  74. add(x, y);
  75. }
  76. for(i = ; i <= n; i++)
  77. if(!vis[i] && a[i])
  78. dfs(i);
  79. for(i = ; i <= n; i++)
  80. if(!mey[i])
  81. ans = min(ans, i);
  82. if(ans != )
  83. {
  84. printf("NO\n%d", ans);
  85. return ;
  86. }
  87. cnt = ;
  88. for(i = ; i <= n; i++)
  89. if(!dfn[i])
  90. tarjan(i);
  91. for(u = ; u <= n; u++)
  92. for(i = head[u]; i != -; i = next[i])
  93. {
  94. v = to[i];
  95. if(belong[u] != belong[v]) r[belong[v]]++;
  96. }
  97. ans = ;
  98. for(i = ; i <= cnt; i++)
  99. if(r[i] == )
  100. {
  101. minn = ;
  102. for(j = ; j <= n; j++)
  103. if(belong[j] == i && a[j])
  104. minn = min(minn, a[j]);
  105. ans += minn;
  106. }
  107. printf("YES\n%d", ans);
  108. return ;
  109. }

间谍网络——tarjan求SCC的更多相关文章

  1. tyvj 1153 间谍网络 tarjan有向图强连通

    P1153 - 间谍网络 From ForeverBell    Normal (OI)总时限:13s    内存限制:128MB    代码长度限制:64KB 描述 Description 由于外国 ...

  2. poj 2186 Popular Cows【tarjan求scc个数&&缩点】【求一个图中可以到达其余所有任意点的点的个数】

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27698   Accepted: 11148 De ...

  3. 洛谷 1262 间谍网络 Tarjan 图论

    洛谷 1262 图论 tarjan 并不感觉把这道题目放在图的遍历中很合适,虽然思路比较简单但是代码还是有点多的,, 将可收买的间谍的cost值设为它的价格,不可购买的设为inf,按照控制关系连图,T ...

  4. tarjan算法求scc & 缩点

    前置知识 图的遍历(dfs) 强连通&强连通分量 对于有向图G中的任意两个顶点u和v存在u->v的一条路径,同时也存在v->u的路径,我们则称这两个顶点强连通.以此类推,强连通分量 ...

  5. 间谍网络(tarjan缩点)

    洛谷传送门 看着这道题给人感觉就是tarjan求SCC,然而还得判断是否能控制全部间谍,这就得先从可以贿赂的点dfs一遍. 如果没有全部被标记了,就输出NO,再从没被标记的点里找最小的标号. 如果全被 ...

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

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

  7. tarjan 缩点 求 scc

    算法学自 BYVoid https://www.byvoid.com/zhs/blog/scc-tarjan/ 这个写得很清楚了 当然 你可能不这么认为 而且 如果是让我 一开始就从这个博客 学 ta ...

  8. Tarjan 求图点强联通,桥的应用

    在图中求双联通和强联通分量是我们解决非树结构的图连通问题的利器 通过求求图的双联通和强联通分量能把图转化成DAG进行求解: 行走 Description 给出一个有向图,你可以选择从任意点出发走到任意 ...

  9. TYVJ P1153 间谍网络

    P1153 间谍网络 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 由于外国间谍的大量渗入,国家安全正处于高度危机之中.如果A间谍手中掌握着关于B间谍的犯罪 ...

随机推荐

  1. python3.4 安装 scrapy 报错 VS2010

    安装scrapy框架报错是常见问题 还好,本人只碰到其中一个bug,以下是此次安装经验 环境 py3.4 windows7 64位 安装有VS2010 pip包管理(pycharm) 报错信息 安装l ...

  2. react学习总结

    http://www.runoob.com/react/react-tutorial.html一般先看一些中文的简单的介绍和一些基本概念http://reactjs.cn/react/docs/get ...

  3. 2761: [JLOI2011]不重复数字(哈希表)

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1770  Solved: 675[Submit][Stat ...

  4. FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...

  5. rip路由协议 细节分析及实例配置【完整版】

    rip路由协议 细节分析及实例配置[完整版] RIP呢,这是一个比较重要的知识点,所以它的知识覆盖面很广泛:但是呢,我将会对碰到的问题进行一些分析解刨(主要是为了帮助自己理清思维):也希望能够从中发现 ...

  6. 浅谈对java中锁的理解

    在并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在java中synchronized关键字被常用于维护数据一致性.synchronized机制是给共享 ...

  7. SQL SERVER 执行大于80M的SQL 脚本

    在CMD控制器窗口 使用SqlCmd命令来执行 具体请看 SqlCmd /? 或者MSDN

  8. IPhone 、Webkit手机浏览器Div滚动、滑动卡,遮罩层被穿透的解决办法

    在滚动条的层上面加上-webkit-overflow-scrolling:touch;样式即可解决!

  9. SpringMVC中@RequestBody引起的400异常处理,返回校验失败具体信息

    问题 使用@RequestBody接收一个json数据的时候,如果传入的参数不符合条件,就会直接返回400的error page. 但究竟是为什么会400并没有抛出来.这对大量参数字段的我们来说,排错 ...

  10. ubuntu nsight上链接OpenGL

    写一个需要使用OpenGL的程序,右击该程序名,此处需要OpenGL库的程序为Julia-C 右击,选择属性,弹出属性对话框,在左边选择build下的设置,中间窗格中选择GCC C++ Linker下 ...