题意:

  给出一个N个节点的有向图。图中任意两点进行通信的代价为路径上的边权和。如果两个点能互相到达那么代价为0。问从点0开始向其余所有点通信的最小代价和。保证能向所有点通信。

题解:

  求出所有的强连通分量,然后进行缩点操作。最后贪心的找出每个点的最小代价,然后求和。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cstring>
  5. #include <algorithm>
  6. using namespace std;
  7. typedef long long ll;
  8. const int maxn = 5e4+;
  9. const int inf = 0x3f3f3f3f;
  10. int n, m;
  11. struct node {
  12. int u, v, w;
  13. }e[maxn<<];
  14. vector<int> g[maxn];
  15. vector<int> rg[maxn];
  16. vector<int> vs;
  17. bool vis[maxn];
  18. int cmp[maxn], in[maxn];
  19. ll ans;
  20. void add_edge(int u, int v) {
  21. g[u].push_back(v);
  22. rg[v].push_back(u);
  23. }
  24. void dfs(int u) {
  25. vis[u] = true;
  26. int len = g[u].size();
  27. for(int i = ; i < len; i++) {
  28. int v = g[u][i];
  29. if(!vis[v]) dfs(v);
  30. }
  31. vs.push_back(u);
  32. }
  33. void rdfs(int u, int k) {
  34. vis[u] = true;
  35. cmp[u] = k;
  36. int len = rg[u].size();
  37. for(int i = ; i < len; i++) {
  38. int v = rg[u][i];
  39. if(!vis[v]) rdfs(v, k);
  40. }
  41. }
  42. int scc() {
  43. memset(vis, , sizeof(vis));
  44. vs.clear();
  45. for(int u = ; u < n; u++) {
  46. if(!vis[u]) dfs(u);
  47. }
  48. memset(vis, , sizeof(vis));
  49. int k = ;
  50. int len = vs.size();
  51. for(int i = len-; i >= ; i--) {
  52. int v = vs[i];
  53. if(!vis[v]) rdfs(v, k++);
  54. }
  55. return k;
  56. }
  57. int main() {
  58. while(~scanf("%d%d", &n, &m)) {
  59. ans = ;
  60. for(int i = ; i < n; i++) {
  61. g[i].clear();
  62. rg[i].clear();
  63. }
  64. for(int i = ; i <= m; i++) {
  65. scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
  66. add_edge(e[i].u, e[i].v);
  67. }
  68. n = scc();
  69. for(int i = ; i < n; i++) in[i] = maxn;
  70. for(int i = ; i <= m; i++) {
  71. int u = cmp[e[i].u];
  72. int v = cmp[e[i].v];
  73. if(u!=v) in[v] = min(in[v], e[i].w);
  74. }
  75. for(int i = ; i < n; i++) ans += in[i];
  76. printf("%lld\n", ans);
  77. }
  78. }

HDU - 3072 Intelligence System的更多相关文章

  1. HDU 3072 Intelligence System (强连通分量)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. HDU 3072 Intelligence System(tarjan染色缩点+贪心+最小树形图)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. hdu 3072 Intelligence System(Tarjan 求连通块间最小值)

    Intelligence System Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  4. HDU——3072 Intelligence System

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. HDU——T 3072 Intelligence System

    http://acm.hdu.edu.cn/showproblem.php?pid=3072 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  6. hdoj 3072 Intelligence System【求scc&&缩点】【求连通所有scc的最小花费】

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. Intelligence System (hdu 3072 强联通缩点+贪心)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. Intelligence System

    Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  9. HDU 3072 SCC Intelligence System

    给出一个带权有向图,要使整个图连通.SCC中的点之间花费为0,所以就先缩点,然后缩点后两点之间的权值为最小边的权值,把这些权值累加起来就是答案. #include <iostream> # ...

随机推荐

  1. JavaScript_DOM学习篇_图片切换小案例

    今天开始学习DOM操作,下面写一个小案例来巩固下知识点. DOM: document object model (文档对象模型) 根据id获取页面元素 : 如: var xx = document.g ...

  2. POJ1286 Necklace of Beads(Polya定理)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9359   Accepted: 3862 Description Beads ...

  3. 汇编:1位16进制数到ASCII码转换

    ;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...

  4. JS简写

    本文来源于多年的 JavaScript 编码技术经验,适合所有正在使用 JavaScript 编程的开发人员阅读. 本文的目的在于帮助大家更加熟练的运用 JavaScript 语言来进行开发工作. 文 ...

  5. source tree 使用心得

    SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mercurial和Subversion版本控制系统工具.支持创建.克隆.提交.pus ...

  6. POJ:3061-Subsequence(尺取法模板详解)

    Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18795 Accepted: 8043 Descript ...

  7. 0x01.被动信息收集

    被动信息收集 基于公开渠道,不与目标系统产生直接交互,尽量避免留下痕迹(不进行大量扫描,正常交互范围) 信息收集内容 IP段 域名 邮件地址(定位邮件服务器,分为个人搭建和公网邮件系统) 文档图片数据 ...

  8. Linux下添加桌面快捷方式

    这里用Ubuntu下BurpSuite举例 sudo vim /home/user/Desktop/burpsuite.desktop //burpsuite随意起名,系统会系动创建文件 文件写入 # ...

  9. label标签的作用

    在用户注册的时候,常常用户点击文字就需要将光标聚焦到对应的表单上面,这个是怎么实现的呢?就是下面我要介绍的<label>标签的for属性 定义:for 属性规定 label 与哪个表单元素 ...

  10. mongo创建数据库和用户

    1.linux安装mongo conf文件配置: 配置文件: dbpath=/home/data/mongodb/mongodb logpath=/home/data/logs/mongodb.log ...