洛谷P1262:https://www.luogu.org/problemnew/show/P1262

思路

一看题目就知道是强连通分量缩点

当图中有强连通分量时 将其缩点

我们可以用dfn数组判断是否可以达到所有人都可以控制

到最后图中可能有如下2种情况

First 整个图为一个强连通分量 ans即是能贿赂的最小值

Second 当图中有链时 贿赂链的第一个人即可取得最小值

代码

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. #define maxn 3010
  5. #define INF 1e9+7
  6. int n,r,p,top,num,cnt,col,ans;
  7. int money[maxn],h[maxn*],de[maxn],st[maxn],dfn[maxn],low[maxn],co[maxn],minn[maxn];
  8. bool vis[maxn];
  9. struct Edge
  10. {
  11. int to;
  12. int next;
  13. }e[maxn*];
  14. void add(int u,int v)
  15. {
  16. e[++cnt].to=v;
  17. e[cnt].next=h[u];
  18. h[u]=cnt;
  19. }
  20. void read()
  21. {
  22. cin>>n>>p;
  23. for(int i=;i<=n;i++)
  24. minn[i]=money[i]=INF;//初始化
  25. for(int i=;i<=p;i++)
  26. {
  27. int x,y;
  28. cin>>x>>y;
  29. money[x]=y;
  30. }
  31. cin>>r;
  32. for(int i=;i<=r;i++)
  33. {
  34. int x,y;
  35. cin>>x>>y;
  36. add(x,y);
  37. }
  38. }
  39. void Tarjan(int u)
  40. {
  41. dfn[u]=low[u]=++num;
  42. st[++top]=u;
  43. vis[u]=;
  44. for(int i=h[u];i;i=e[i].next)
  45. {
  46. int v=e[i].to;
  47. if(!dfn[v])
  48. {
  49. Tarjan(v);
  50. low[u]=min(low[u],low[v]);
  51. }
  52. else
  53. if(vis[v])
  54. {
  55. low[u]=min(low[u],dfn[v]);
  56. }
  57. }
  58. if(dfn[u]==low[u])
  59. {
  60. col++;
  61. while(st[top+]!=u)
  62. {
  63. co[st[top]]=col;
  64. vis[st[top]]=;
  65. minn[col]=min(minn[col],money[st[top]]);//计算每个强连通分量中的最小花费
  66. top--;
  67. }
  68. }
  69. }
  70. int main()
  71. {
  72. read();
  73. for(int i=;i<=n;i++)
  74. if(!dfn[i]&&money[i]!=INF) Tarjan(i);//能被贿赂的人才可以缩点
  75. for(int i=;i<=n;i++)
  76. if(!dfn[i])//如果dfn为0说明没有被控制
  77. {
  78. cout<<"NO"<<endl<<i;
  79. return ;
  80. }
  81. for(int i=;i<=n;i++)//统计入度
  82. for(int j=h[i];j;j=e[j].next)
  83. if(co[i]!=co[e[j].to]) de[co[e[j].to]]++;
  84. for(int i=;i<=col;i++)//如果入度为0 即是一条链
  85. if(!de[i]) ans+=minn[i];
  86. cout<<"YES"<<endl<<ans;
  87. }

【题解】洛谷P1262 间谍网络 (强连通分量缩点)的更多相关文章

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

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

  2. 洛谷——P1262 间谍网络

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

  3. 洛谷P1262 间谍网络

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

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

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

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

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

  6. 洛谷—— P1262 间谍网络

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

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

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

  8. 洛谷P1262间谍网络

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

  9. 洛谷 P1262 间谍网络

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

随机推荐

  1. 记一次坑爹的jconsole使用

    之前一直是用jstat来监控GC的,后来发现原来有个自带的jconsole,是可始化界面的,而且也是oracle公司自带的工具,与是拿来用一下,发现蛮好用的. 然而,在一次复现实验中,发现原来能复现的 ...

  2. Mysql中各种与字符编码集(character_set)有关的变量含义

    mysql涉及到各种字符集,在此做一个总结. 字符集的设置是通过环境变量来设置的,环境变量和linux中的环境变量是一个意思.mysql的环境变量分为两种:session和global.session ...

  3. linus系统下使用hexo搭建个人博客

    最近在搭建自己的个人网站,准备在上面内置一个博客模块,把之前或者以后杂七杂八的总结都放里边. 大致查了一下在WordPress和Hexo间选用了Hexo,体量较小一点. 先贴上Hexo的官方文档:He ...

  4. linux下统计文本行数的各种方法(二)

    上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以.现在试试脚本的方式,统计多个文件的行数 一.统计目录下所有文件的文件数及所有行数 脚本暂时命名为count.sh,代码如下: #!/bin/b ...

  5. spring 依赖注入总结--为什么官方推荐构造器注入

    一 公司小伙伴使用了构造器注入,说是spring的官方推荐.但是,我问了三个问题,他都答不出来,感觉能写篇博文. 官方为什么推荐构造器注入? 构造器注入和属性注入的区别是啥? 你知道有几种注入方式吗? ...

  6. Windows映射网络驱动器提示错误

    问题描述:Windows映射网络驱动器的时候,提示文件和打印机共享资源处于联机状态未对连接尝试检测到做出响应 解决方法:不同情况可能不一样,我的原因是,映射的Linux,防火墙处于开启状态,关闭了就可 ...

  7. [转]微信小程序登录逻辑梳理

    本文转自:http://www.jianshu.com/p/d9996cafdb31 官方文档 文档相关地址: 用户登录 获取用户数据 用户数据的签名验证和加解密                   ...

  8. 使用IDEA创建java项目(hello word)

    前提:已安装好jdk,配置好环境变量.我使用的是java 8. 首先在自己的D盘下建一个文件夹,用来存放我们待会新建的项目,我创建了IdeaProject: 1,第一步打开idea 第二步选择创建ja ...

  9. VS2012 无法启动 IIS Express Web

    用记事本打开项目的.csproj文件,定位到<WebProjectProperties>,把关于IIS的配置<DevelopmentServerPort>.<Develo ...

  10. javascript对HTML字符转义与反转义

    1.背景:在项目中,经常遇到一些字符需要进行转义后才能显示到界面上,如“&”,在界面中显示的是“&”,在html中书写“&”,显示在界面的中的依然是“&”. 这时候,就 ...