题目

Description

给出一棵有N个结点的树,给出Q个询问,求结点xj过结点K到节点yj的最短距离

Format

Input

第一行一个数n

接下来共有n-1行,三个数u,v,len表示u和v之间存在一条边长为len

再给你Q,K。代表有Q个询问,K就是那个必经过

接下来Q行,每行两个数字xj,yj

N,Q<=1e6

len<=1e9

Output

如题

Samples

输入数据 1

5
1 2 1
1 3 1
2 4 1
3 5 1
3 1
2 4
2 3
4 5

Copy

输出数据 1

3
2
4

注:样例模拟


思路:

这个题是唬人的,既然是一棵树则两点之间的距离是唯一的。只是他还要求经过点k,那么为了方便,我们以k树根,计算出每个点到k距离,计为dis[x],则x到y的距离就是 dis[x] + dis[y]

那么问题来了:我们怎么计算dis呢?一开始我是想用迪杰斯特拉的,但是后来才发现不需要,因为树上两点的距离是固定的,用迪杰斯特拉会有松弛操作,可这里2点之间的距离不会更新的。所以只要用个dfsk开始遍历整棵树,并用s记录遍历到目前节点的边的权重之和,每往下遍历一个子节点就把dfs参数中的s加上该边边权即可。


代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
/*
pre[i]:对于第i条边来说,它的上一条边是哪一条边
now[x]:对于点x来说,最后一条描述它充当父结点的边是哪一条边
son[i]:在第i条边中,充当子结点的点是哪一个
bq[i]:在第i条边中,边权是多少
*/
int eg,pre[1000001],now[1000001],son[1000001],bq[1000001],n,dis[1000001],q,k;
void dfs(int beg,int fa,int s)//beg:从哪个点开始dfs   fa:beg父节点的编号   s:此时从根遍历到beg的权重总和
{dis[beg] = s;for(int i = now[beg]; i; i = pre[i])//遍历beg的子节点if(son[i] != fa)dfs(son[i],beg,s + bq[i]);
}
void adeg(int u,int v,int w)
{pre[++eg] = now[u];bq[eg] = w;now[u] = eg;son[eg] = v;
}
signed main()
{cin>>n;for(int i = 1; i < n; i++){int u,v,w;cin>>u>>v>>w;adeg(u,v,w);adeg(v,u,w);}cin>>q>>k;dfs(k,0,0);while(q--){int a,b;cin>>a>>b;cout<<dis[a] + dis[b]<<endl;}return 0;
}

#Z0424. 树上的旅行相关推荐

  1. 机器学习 数学_机器学习的数学先决条件

    机器学习 数学 Hi everyone, welcome to my second post! This is going to be the continuation from my first p ...

  2. 在没有专业经验的情况下获得第一份软件工作

    I've had a few friends recently ask me about breaking into the software industry. Most have been loo ...

  3. 威胁建模_现实世界中的威胁建模

    威胁建模 Mike Goodwin, VP product security and architecture and Technical Fellow, Sage Sage产品安全与架构副总裁兼技术 ...

  4. 刷题记录(NC16562 开车旅行)(树上倍增)

    NC16562 开车旅行 题目链接 关键点: 1.预处理:将所有点到达另一个点的最短和次短距离先求出 方法:利用set,从最后一个城市开始插入,每次插入到set中,查看左右是否存在有城市(即set是按 ...

  5. 《商务旅行》解题报告

    <商务旅行>解题报告 by mps [题目描述] 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其 ...

  6. bzoj2746: [HEOI2012]旅行问题

    2746: [HEOI2012]旅行问题 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 926  Solved: 295 [Submit][Stat ...

  7. [SDOI2014]旅行

    [SDOI2014]旅行 题意: n个城市,n-1条边,任意两个城市互通,每个城市有所信奉的宗教和城市评级,有四种指令: 1.将城市x的居民改信为c教 2.将城市x的评级调整为w 3.统计x到y,路上 ...

  8. 迎开学水题狂欢赛(舞踏会[dp+三叉树],HH去散步[矩阵快速幂],排序[模拟],铁路旅行[线段树])

    快速简单记录老师口胡(可能就我自己看得懂了吧-) 文章目录 T1:舞踏会 title solution code T2:HH去散步 title solution code T3:排序 title so ...

  9. [bzoj3531][Sdoi2014]旅行

    S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰.为了方便,我们用不同的 ...

最新文章

  1. 攻和防谁更厉害?AI技术在恶意软件检测中的应用和对抗
  2. 查看当前正在运行的python进程
  3. mysql計劃任務_MySQL計劃任務 | 學步園
  4. javascript11-object03-extend
  5. 转载--线程同步机制及比较
  6. 1---结构体中最后一个成员为[0]长度数组的用法
  7. boost::io::ostream_joiner模块相关的测试程序
  8. Java并发(十九):final实现原理
  9. 在eclipse中创建第一个java应用程序,并在控制台输出“hello world”。
  10. 使用Prometheus发现在Kubernetes上运行的应用程序
  11. MySQL 5.7.18忘记密码和密码过期解决
  12. python爬虫之app数据抓取实战_Python爬虫工程师必学——App数据抓取实战 ??
  13. VIM和sed 替换字符串方法
  14. win7电脑怎么设置桌面便签
  15. 下周出发去印度:直觉之旅,发现自己
  16. 蘑菇战争2显示没有连接服务器,蘑菇战争2新手怎么玩?四步带你解决新手难关[多图]...
  17. python基础教程第4版pdf百度云-Python入门书籍电子版PDF百度云网盘免费下载
  18. 【转】Java方向如何准备BAT技术面试答案(汇总版)
  19. 关于电脑连不上WiFi,但可以连上网线的解决办法
  20. Vue 使用XLSX导出excel,并且设置标题背景颜色、字体、居中。并且在前端导出成excel文件

热门文章

  1. nowcoder 页面调度算法
  2. 4所北京双一流大学,疏解到雄安!2035年,全部搬迁
  3. 恒玄BES调试笔记-BES2500如何客制化开关Anc Assist
  4. “常数变易法”有效的原理
  5. 非齐次振动方程和输运方程解法-傅里叶级数法冲量定理法
  6. MP3,AAC,AC3技术比较
  7. css文本内容过长时就自动换行
  8. 黑泽明 袅袅夕阳情
  9. 计算机考试考试顺序,科目三考试顺序是先到先考吗
  10. ipython介绍_IPython的介绍与使用