HDU 3072 SCC Intelligence System
给出一个带权有向图,要使整个图连通。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相关推荐
- Intelligence System HDU - 3072(强连通分量)
Intelligence System HDU - 3072 题意:一个人要传递命令给所有人,如果两人之间互达,不需任何费用,求最少费用 有向图强连通. 1 #include <bits/std ...
- [HDU3072]:Intelligence System(塔尖+贪心)
题目传送门 题目描述 "这一切都是命运石之门的选择." 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮). 为了 ...
- HDU 4940 Destroy Transportation system(无源汇上下界网络流)
Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...
- hdu3072 Intelligence System (最小树形图?)
题意:给一个有向图,问要从0号点能到达所有点所需要经过路径的最小权值和是多少,然而,若两点强联通,则这两点互相到达不需要花费.保证0号点能到达所有点 tarjan缩点以后直接取每个点入边中花费最小的即 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 区块链教程Fabric1.0源代码分析scc(系统链码)
区块链教程Fabric1.0源代码分析scc(系统链码),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退,让人们更 ...
- HDU 2149-Public Sale(巴什博奕)
Public Sale Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 一系列图论问题[转]
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
最新文章
- JS判断数组里面是否包含指定的数
- 5款常见原型工具,产品特色知多少?
- flatmap 与map 的区别 java_map和flatmap的区别+理解、学习与使用 Java 中的 Optional
- Sharepoint 2007 用户信息管理总结(2) - 用户信息管理
- Java数组相关知识
- 解决zookeeper启动失败Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain报错
- selenium windows 下面环境搭建(安装JDK)
- 古代的酒到底多少度,为何古人动不动喝好几坛都不会醉呢?
- 重新设置Visual Studio 环境
- 1.5 案例:多项式曲线拟合的比较
- AMS1117典型电路
- Seaweedfs 详细说明
- 超30亿人脸数据被泄露,美国AI公司遭科技巨头联合“封杀”
- 有效缓解眼疲劳的绿色桌面
- Love Letter
- 获奖团队访谈录|“AI+无线通信”赛道三等奖团队
- 今天来个好玩儿的 “ 反射 ”
- [VIM]VIM/GVIM中代码的折叠和打开
- 解决windows上鼠标右键新建没有文本文档的选项
- vintage的一点深入思考
热门文章
- java json注解_返回json用什么注解
- 计算机怎么没有桌面文件夹名称大全,你的电脑文件总是找不到?是时候学习文件夹分类整理了...
- c 中头文件和源文件的区别是什么
- C语言打印输出红色字体
- c语言也能用模板方法模式?
- 计算机组成原理唐朔飞课后答案第六章,计算机组成原理第六章部分课后题答案(唐朔飞版)...
- rds mysql 磁盘空间,RDS MySQL 空间问题的原因和解决
- Ubantu键盘快捷键
- 什么是单模光纤收发器,应用范围有哪些?
- 以太网应用于控制时存在的问题