HDU - 3072 Intelligence System
题意:
给出一个N个节点的有向图。图中任意两点进行通信的代价为路径上的边权和。如果两个点能互相到达那么代价为0。问从点0开始向其余所有点通信的最小代价和。保证能向所有点通信。
题解:
求出所有的强连通分量,然后进行缩点操作。最后贪心的找出每个点的最小代价,然后求和。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 5e4+;
const int inf = 0x3f3f3f3f;
int n, m;
struct node {
int u, v, w;
}e[maxn<<];
vector<int> g[maxn];
vector<int> rg[maxn];
vector<int> vs;
bool vis[maxn];
int cmp[maxn], in[maxn];
ll ans;
void add_edge(int u, int v) {
g[u].push_back(v);
rg[v].push_back(u);
}
void dfs(int u) {
vis[u] = true;
int len = g[u].size();
for(int i = ; i < len; i++) {
int v = g[u][i];
if(!vis[v]) dfs(v);
}
vs.push_back(u);
}
void rdfs(int u, int k) {
vis[u] = true;
cmp[u] = k;
int len = rg[u].size();
for(int i = ; i < len; i++) {
int v = rg[u][i];
if(!vis[v]) rdfs(v, k);
}
}
int scc() {
memset(vis, , sizeof(vis));
vs.clear();
for(int u = ; u < n; u++) {
if(!vis[u]) dfs(u);
}
memset(vis, , sizeof(vis));
int k = ;
int len = vs.size();
for(int i = len-; i >= ; i--) {
int v = vs[i];
if(!vis[v]) rdfs(v, k++);
}
return k;
}
int main() {
while(~scanf("%d%d", &n, &m)) {
ans = ;
for(int i = ; i < n; i++) {
g[i].clear();
rg[i].clear();
}
for(int i = ; i <= m; i++) {
scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
add_edge(e[i].u, e[i].v);
}
n = scc();
for(int i = ; i < n; i++) in[i] = maxn;
for(int i = ; i <= m; i++) {
int u = cmp[e[i].u];
int v = cmp[e[i].v];
if(u!=v) in[v] = min(in[v], e[i].w);
}
for(int i = ; i < n; i++) ans += in[i];
printf("%lld\n", ans);
}
}
HDU - 3072 Intelligence System的更多相关文章
- HDU 3072 Intelligence System (强连通分量)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 3072 Intelligence System(tarjan染色缩点+贪心+最小树形图)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 3072 Intelligence System(Tarjan 求连通块间最小值)
Intelligence System Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- HDU——3072 Intelligence System
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU——T 3072 Intelligence System
http://acm.hdu.edu.cn/showproblem.php?pid=3072 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- hdoj 3072 Intelligence System【求scc&&缩点】【求连通所有scc的最小花费】
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Intelligence System (hdu 3072 强联通缩点+贪心)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Intelligence System
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 3072 SCC Intelligence System
给出一个带权有向图,要使整个图连通.SCC中的点之间花费为0,所以就先缩点,然后缩点后两点之间的权值为最小边的权值,把这些权值累加起来就是答案. #include <iostream> # ...
随机推荐
- 《JSON笔记之二》----封装JSONUtil
许多java开发人员对于fastjson再也熟悉不过了,这是alibaba开源的依赖,使用fastjson可以使我们很容易的把请求json串转换成为我们所需要的对象.list.map等对象格式,对于开 ...
- 给网站添加icon图标
只需制成ico结尾的图片即可
- 小游戏banner广告流量量主指引
小程序导航 https://wq.xmaht.top
- 用PHP关于Jquery表单插件ajaxForm里success不返回问题
简单说一下吧,在用ajaxForm的时候,sucess突然之间不返回了,直接转到error里面去, 网页代码 ................. $('#add-type').ajaxForm({ d ...
- php 图片操作类,支持生成缩略图,添加水印,上传缩略图
<?php class Image { //类开始 public $originimage = ""; //源图片文件地址 public $image ...
- windows系统下用VScode配置远程编辑服务器文件的环境!通过Rmate方法
虽然公司电脑win可以通过Xshell通过SSH远程连接家中内网linux服务器了,但是只能用vim编辑文件有点不爽. 于是上网查询,windows下使用vscode远程编辑服务器文件的办法.参照博文 ...
- linux无名管道
特点 无名管道是半双工的,也就是说,一个管道要么只能读,要么只能写 只能在有共同祖先的进程间使用(父子进程.兄弟进程.子孙进程等) fork或者execve调用创建的子进程,继承了父进程的文件描述符 ...
- C——可变参数
1.要学可变参数,需要先了解C编译器对栈的管理 做个实验可以得到 #include <stdio.h> void func(int a, char b, int c, int d) { i ...
- python——获取数据类型
在python中,可使用type()和isinstance()内置函数获取数据类型 如: (1)type()的使用方法: >>> a = '230' >> ...
- dijkstra算法与优先队列
这是鄙人的第一篇技术博客,作为算法小菜鸟外加轻度写作障碍者,写技术博客也算是对自己的一种挑战和鞭策吧~ 言归正传,什么是dijkstra算法呢? -dijkstra算法是一种解决最短路径问题的简单有效 ...