http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443

给定一幅无向带权连通图G = (V, E) (这里V是点集,E是边集)。从点u开始的最短路径树是这样一幅图G1 = (V, E1),其中E1是E的子集,并且在G1中,u到所有其它点的最短路径与他在G中是一样的。
现在给定一幅无向带权连通图G和一个点u。你的任务是找出从u开始的最短路径树,并且这个树中所有边的权值之和要最小。

最短路加最小生成树合在一起就ok 了!

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>
#include <queue>
#define LL long long
#define MAXN 300005
using namespace std;
int n, m;
LL dist[MAXN];
int inQueue[MAXN], root[MAXN];
int in[MAXN];
vector <pair< int, LL> > G[MAXN];
queue <int> Q;
struct Edge
{int u, v;LL cost;Edge(int U = -1, int V = -1, LL C = -1){u = U;v = V;cost = C;}bool operator < (const Edge& x) const{return cost < x.cost;}
};
vector <Edge> edge;
int findRoot(int x)
{if(x == root[x]) return x;elsereturn root[x] = findRoot(root[x]);
}
void unite(int x, int y)
{x = findRoot(x);y = findRoot(y);if(x == y) return;root[x] = root[y];
}
void spfa(int star)
{memset(dist, -1, sizeof(dist));memset(inQueue, 0, sizeof(inQueue));while(!Q.empty()) Q.pop();dist[star] = 0;inQueue[star] = 1;Q.push(star);while(!Q.empty()){int now = Q.front();Q.pop();inQueue[now] = 0;int siz = G[now].size();for(int i = 0; i < siz; i++){int v = G[now][i].first;LL cost = G[now][i].second;if(dist[v] == -1 || dist[v] > dist[now] + cost){dist[v] = dist[now] + cost;if(!inQueue[v]){inQueue[v] = 1;Q.push(v);}}}}
}
LL Kruskal()
{LL res = 0;memset(in, 0, sizeof(in));sort(edge.begin(), edge.end());int siz = edge.size();for(int i = 0; i < siz; i++){int u = edge[i].u, v = edge[i].v;LL cost = edge[i].cost;if(in[v] || findRoot(u) == findRoot(v)) continue;in[v] = 1;unite(u, v);res += cost;}return res;
}
int main()
{while(scanf("%d%d", &n, &m) != EOF){for(int i = 0; i <= n; i++){G[i].clear();root[i] = i;}for(int i = 0; i < m; i++){int u, v, cost;scanf("%d%d%d", &u, &v, &cost);G[u].push_back(make_pair(v, (LL)cost));G[v].push_back(make_pair(u, (LL)cost));}int star;scanf("%d", &star);spfa(star);edge.clear();for(int i = 1; i <= n; i++){int siz = G[i].size();for(int j = 0; j < siz; j++){int v = G[i][j].first;LL cost = G[i][j].second;if(dist[v] == dist[i] + cost){edge.push_back(Edge(i, v, cost));}}}printf("%lld\n", Kruskal());}return 0;
}

51nod 1443 路径和树相关推荐

  1. 51nod 1443 路径和树——最短路生成树

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443 不只是做一遍最短路.还要在可以选的边里选最短的才行. 以为是 ...

  2. 51NOD - 1830路径交

    题目链接:51NOD - 1830路径交 因为每次是区间询问,所以我们可以类似ST表预处理,或者线段树区间合并去处理. 每次维护节点就是代表所有路径的交集. 现在问题就是两个路径的交怎么求: 两条路径 ...

  3. 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)

    题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...

  4. 牛客练习赛26 E-树上路径 (树链剖分+线段树)

    链接:https://ac.nowcoder.com/acm/contest/180/E 来源:牛客网 树上路径 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语 ...

  5. mysql树节点路径,关于mysql:从使用物化路径编码树的表中选择,按深度优先排序(无递归/ ltree)...

    我在关系数据库中有一个表,其中我使用称为物化路径(也称为Lineage列)的技术对树进行编码. 也就是说,对于我树中的每个节点,我在表中有一行,并且对于每一行,我有一个名为ancestry的字符串列, ...

  6. 51NOD L4-第三章 树 刷题记录-zgw

    第三章 树 2423 叶子节点的数量 AC 3.7 2282 树的深度 AC 3.7 2281 树的Size之和 AC 3.7 2627 树的深度及子树大小 AC 3.10 3039 叶子节点的路径 ...

  7. 51NOD L4-第三章 树 刷题记录-zyz

    第三章 树 2423 叶子节点的数量 2282 树的深度 2281 树的Size之和 2627 树的深度及子树大小 3039 叶子节点的路径 2599 最近公共祖先(LCA) 2621 树上距离 26 ...

  8. Acwing1072 树的最长路径(树的直径)树形Dp 记忆化搜索

    题目描述 原题链接: https://www.acwing.com/problem/content/1074/ 思路 以下针对树的边权都一样的情况. 推荐使用BFS, 比赛的时候栈空间只有1MB,DF ...

  9. 51nod 1631 小鲨鱼在51nod小学 【线段树--】

    1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的 ...

最新文章

  1. 这10道Java面试题!95%的人回答不出来!
  2. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1051:分段函数
  3. 《图解服务器网络架构》 学习笔记
  4. 互联网公司的安全风险
  5. Java Spring MVC分层设计
  6. int long long 的取值范围
  7. python elementtree乱码_python ElementTree
  8. 微软推出Windows Sandbox:可安全运行任何应用的一次性VM\n
  9. Linux shell 的条件 / 比较语法
  10. 如何改善在线游戏的体验?有哪些实用技巧?
  11. 目标跟踪算法研究整理
  12. 笔记-软考高项-错题笔记汇总4
  13. 如何在html页面集成markdown编辑器
  14. 舞钢大业投资王恒:央行再度定向降准力挺“三农”小微覆盖大部分的城市商业银行
  15. 墙裂推荐6本适用于所有Java程序员阅读书籍
  16. CPU GPU 扫盲帖
  17. win10 计算机 搜索文件,在 Windows 10 上高效搜文件,自带搜索功能其实就够了
  18. 百宝箱-Rime配置
  19. mysql忘记密码怎么处理
  20. Nokia 5530XM

热门文章

  1. ETL常用的三种工具介绍及对比Datastage,Informatica
  2. 关于计算机老师的话,关于对老师的话
  3. CURL SSL received a weak ephemeral Diffie-Hellman key
  4. RK3568 debian系统iptables命令报错
  5. P1434 [SHOI2002]滑雪(动态规划DP)
  6. java null 写前面_java中判断对象为null时,null在前面还是后面
  7. Halcon之Blob分析
  8. 生产用计算机计入什么科目,生产车间水电费计入什么科目?
  9. 学习笔记:关于医学图像配准,以及腹部 CT、X线、MRI等图像的一些问题 持续更新
  10. HTML5中article元素的使用