51nod 1443 路径和树(最短路树)
题目链接:路径和树
题意:给定无向带权连通图,求从u开始边权和最小的最短路树,输出最小边权和。
题解:构造出最短路树,把存留下来的边权全部加起来。(跑dijkstra的时候松弛加上$ < $变成$ <= $,因为之后跑到该顶点说明是传递下来的,该情况边权和最小。)
以样例作说明:第一次从顶点3跑到顶点1,最短路为2;第二次从顶点3经过顶点2跑到顶点1,最短路也为2,但是第二次跑的方式可以把从顶点3跑到顶点2的包括进去,这样形成的最短路树边权和最小。
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long ll;
const int N=3e5+; struct qnode{
ll v,w;
qnode(){}
qnode(ll v,ll w):v(v),w(w){}
bool operator < (const qnode& b) const{
return w>b.w;
}
}; struct node{
ll nxt,v,w;
node(){}
node(ll nxt,ll v,ll w):nxt(nxt),v(v),w(w){}
}; ll n,m,tot,ans=;
node edge[N<<];
ll head[N],d[N],w[N];
qnode cur,tmp;
bool vis[N];
priority_queue <qnode> Q;
pair <ll,ll> fa[N];
vector <ll> g[N]; void add_edge(ll u,ll v,ll w){
edge[tot]=node(head[u],v,w);
head[u]=tot++;
} void init(){
tot=;
memset(head,,sizeof(head));
} void dijkstra(ll s){
memset(vis,,sizeof(vis));
for(int i=;i<N;i++) d[i]=1e18;
d[s]=;
Q.push(qnode(s,));
while(!Q.empty()){
cur=Q.top();
Q.pop();
ll u=cur.v;
if(vis[u]) continue;
vis[u]=true;
for(ll i=head[u];i;i=edge[i].nxt){
ll v=edge[i].v;
ll w=edge[i].w;
if(d[u]+w<=d[v]){
d[v]=d[u]+w;
fa[v]=make_pair(u,(i+)/);
Q.push(qnode(v,d[v]));
}
}
}
} void dfs(ll u,ll father){
for(ll v:g[u]){
if(v!=father) dfs(v,u);
}
ans+=w[fa[u].second];
} int main(){
init();
scanf("%lld%lld",&n,&m);
for(int i=;i<=m;i++){
ll u,v;
scanf("%lld%lld%lld",&u,&v,&w[i]);
add_edge(u,v,w[i]);
add_edge(v,u,w[i]);
}
ll st;
scanf("%lld",&st);
dijkstra(st);
for(ll i=;i<=n;i++){
if(st==i) continue;
g[fa[i].first].push_back(i);
}
dfs(st,);
printf("%lld\n",ans);
return ;
}
51nod 1443 路径和树(最短路树)的更多相关文章
- 51nod 1443 路径和树(最短路)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443 1443 路径和树 题目来源: CodeForces ...
- 51Nod 1443 路径和树 —— dijkstra
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443 首先要得到一个最短路树: 注意边权和最小,因为在最短路中,每 ...
- 51nod 1443 路径和树——最短路生成树
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443 不只是做一遍最短路.还要在可以选的边里选最短的才行. 以为是 ...
- 51Nod 1443 路径和树
还是一道很简单的基础题,就是一个最短路径树的类型题目 我们首先可以发现这棵树必定满足从1出发到其它点的距离都是原图中的最短路 换句话说,这棵树上的每一条边都是原图从1出发到其它点的最短路上的边 那么直 ...
- BZOJ 2725 [Violet 6]故乡的梦 线段树+最短路树
\(\color{#0066ff}{ 题目描述 }\) \(\color{#0066ff}{输入格式}\) \(\color{#0066ff}{输出格式}\) \(\color{#0066ff}{输入 ...
- BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- [CF1051F]The Shortest Statement_堆优化dij_最短路树_倍增lca
The Shortest Statement 题目链接:https://codeforces.com/contest/1051/problem/F 数据范围:略. 题解: 关于这个题,有一个重要的性质 ...
- [BZOJ1576] [BZOJ3694] [USACO2009Jan] 安全路径(最短路径+树链剖分)
[BZOJ1576] [BZOJ3694] [USACO2009Jan] 安全路径(最短路径+树链剖分) 题面 BZOJ1576和BZOJ3694几乎一模一样,只是BZOJ3694直接给出了最短路树 ...
- Connections between cities HDU - 2874(最短路树 lca )
题意: 给出n个点m条边的图,c次询问 求询问中两个点间的最短距离. 解析: Floyd会T,所以用到了最短路树..具体思想为: 设k为u和v的最近公共祖先 d[i] 为祖结点到i的最短距离 则di ...
随机推荐
- centos7系统管理和运维实战——运维必备的网络管理技能(1)
运维必备的网络管理技能 一.网络管理协议: 1.简单的两个概念: DHCP(动态主机配置协议):如果网络结构要更改,需要从新初始化网络参数,手机用动态主机配置协议可以避免这个问题.客户端可以从D ...
- 通过view实现rest api接口
Django rest framwork之view 基于Django的View实现Json数据的返回: # _*_ encoding:utf-8 _*_ __author__ = 'LYQ' __da ...
- Django数据库操作中You are trying to add a non-nullable field 'name' to contact without a default错误处理
name = models.CharField(max_length=50) 执行:python manage.py makemirations出现以下错误: You are trying to ad ...
- Monkey脚本API简介
一.API简介 LaunchActivity(pkg_name, cl_name):启动应用的Activity.参数:包名和启动的Activity. Tap(x, y, tapDuration): 模 ...
- Bootstrap之图片展示界面Demo
代码:(使用模板引擎freemarker) <!DOCTYPE html> <html> <head> <title>图片</title> ...
- Bootstrap之响应式导航栏
代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...
- QXcbConnection: Could not connect to display
import matplotlib; matplotlib.use('agg') 注意:要添加到所有matplotlib前面,否则不起作用
- java数据库导入excel数据
导入数据会将表格分为xls和xlsx两种格式,网上有很多案例 1.excel数据表中的数据不全,数据库中又是必填选项:---从sql语句入手:判断有无 来改变语句 //设置可有可无 字段 加一个必有字 ...
- 洛谷 P1112 波浪数
题目描述 波浪数是在一对数字之间交替转换的数,如 121212112121211212121 ,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数 191919191919191919 是一个十进 ...
- Civil 3D CustomDraw .NET混合项目设置
样例文件中的CustomDraw项目使用的是COM API,但COM API不完整,某些时候需要使用.NET API,此时需要将C++项目设置成"公共语言运行时支持(/clr)"但 ...