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

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <vector>
 6 #include <stack>
 7 using namespace std;
 8
 9 int n, m;
10
11 const int maxn = 50000 + 10;
12
13 vector<int> G[maxn], C[maxn];
14
15 stack<int> S;
16 int pre[maxn], lowlink[maxn], sccno[maxn];
17 int dfs_clock, scc_cnt;
18
19 void dfs(int u)
20 {
21     pre[u] = lowlink[u] = ++dfs_clock;
22     S.push(u);
23     for(int i = 0; i < G[u].size(); i++)
24     {
25         int v = G[u][i];
26         if(!pre[v])
27         {
28             dfs(v);
29             lowlink[u] = min(lowlink[u], lowlink[v]);
30         }
31         else if(!sccno[v]) lowlink[u] = min(lowlink[u], pre[v]);
32     }
33
34     if(lowlink[u] == pre[u])
35     {
36         scc_cnt++;
37         for(;;)
38         {
39             int x = S.top(); S.pop();
40             sccno[x] = scc_cnt;
41             if(x == u) break;
42         }
43     }
44 }
45
46 void find_scc()
47 {
48     dfs_clock = scc_cnt = 0;
49     memset(pre, 0, sizeof(pre));
50     memset(sccno, 0, sizeof(sccno));
51     for(int i = 0; i < n; i++) if(!pre[i]) dfs(i);
52 }
53
54 int cost[maxn];
55
56 int main()
57 {
58     while(scanf("%d%d", &n, &m) == 2)
59     {
60         for(int i = 0; i < n; i++) { G[i].clear(); C[i].clear(); }
61         while(m--)
62         {
63             int u, v, d; scanf("%d%d%d", &u, &v, &d);
64             G[u].push_back(v); C[u].push_back(d);
65         }
66         find_scc();
67
68         memset(cost, -1, sizeof(cost));
69         for(int i = 0; i < n; i++)
70             for(int j = 0; j < G[i].size(); j++)
71             {
72                 int u = sccno[i], v = sccno[G[i][j]];
73                 if(u == v) continue;
74                 if(cost[v] == -1) cost[v] = C[i][j];
75                 else cost[v] = min(cost[v], C[i][j]);
76             }
77
78         int ans = 0;
79         for(int i = 1; i <= scc_cnt; i++) if(cost[i] != -1) ans += cost[i];
80         printf("%d\n", ans);
81     }
82
83     return 0;
84 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4718315.html

HDU 3072 SCC Intelligence System相关推荐

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

    Intelligence System HDU - 3072 题意:一个人要传递命令给所有人,如果两人之间互达,不需任何费用,求最少费用 有向图强连通. 1 #include <bits/std ...

  2. [HDU3072]:Intelligence System(塔尖+贪心)

    题目传送门 题目描述 "这一切都是命运石之门的选择." 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮). 为了 ...

  3. HDU 4940 Destroy Transportation system(无源汇上下界网络流)

    Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...

  4. hdu3072 Intelligence System (最小树形图?)

    题意:给一个有向图,问要从0号点能到达所有点所需要经过路径的最小权值和是多少,然而,若两点强联通,则这两点互相到达不需要花费.保证0号点能到达所有点 tarjan缩点以后直接取每个点入边中花费最小的即 ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 区块链教程Fabric1.0源代码分析scc(系统链码)

    区块链教程Fabric1.0源代码分析scc(系统链码),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退,让人们更 ...

  7. HDU 2149-Public Sale(巴什博奕)

    Public Sale Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  8. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  9. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

最新文章

  1. JS判断数组里面是否包含指定的数
  2. 5款常见原型工具,产品特色知多少?
  3. flatmap 与map 的区别 java_map和flatmap的区别+理解、学习与使用 Java 中的 Optional
  4. Sharepoint 2007 用户信息管理总结(2) - 用户信息管理
  5. Java数组相关知识
  6. 解决zookeeper启动失败Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain报错
  7. selenium windows 下面环境搭建(安装JDK)
  8. 古代的酒到底多少度,为何古人动不动喝好几坛都不会醉呢?
  9. 重新设置Visual Studio 环境
  10. 1.5 案例:多项式曲线拟合的比较
  11. AMS1117典型电路
  12. Seaweedfs 详细说明
  13. 超30亿人脸数据被泄露,美国AI公司遭科技巨头联合“封杀”
  14. 有效缓解眼疲劳的绿色桌面
  15. Love Letter
  16. 获奖团队访谈录|“AI+无线通信”赛道三等奖团队
  17. 今天来个好玩儿的 “ 反射 ”
  18. [VIM]VIM/GVIM中代码的折叠和打开
  19. 解决windows上鼠标右键新建没有文本文档的选项
  20. vintage的一点深入思考

热门文章

  1. java json注解_返回json用什么注解
  2. 计算机怎么没有桌面文件夹名称大全,你的电脑文件总是找不到?是时候学习文件夹分类整理了...
  3. c 中头文件和源文件的区别是什么
  4. C语言打印输出红色字体
  5. c语言也能用模板方法模式?
  6. 计算机组成原理唐朔飞课后答案第六章,计算机组成原理第六章部分课后题答案(唐朔飞版)...
  7. rds mysql 磁盘空间,RDS MySQL 空间问题的原因和解决
  8. Ubantu键盘快捷键
  9. 什么是单模光纤收发器,应用范围有哪些?
  10. 以太网应用于控制时存在的问题