AtCoder Beginner Contest 070 Transit Tree Path
来源:互联网 发布:免费的一级域名 编辑:程序博客网 时间:2024/06/07 11:02
You are given a tree with N vertices.
Here, a tree is a kind of graph, and more specifically, a connected undirected graph with N−1 edges, where N is the number of its vertices.
The i-th edge (1≤i≤N−1) connects Vertices ai and bi, and has a length of ci.
You are also given Q queries and an integer K. In the j-th query (1≤j≤Q):
- find the length of the shortest path from Vertex xj and Vertex yj via Vertex K.
Input
Input is given from Standard Input in the following format:
N a1 b1 c1 : aN−1 bN−1 cN−1Q Kx1 y1: xQ yQ
Output
Print the responses to the queries in Q lines.
In the j-th line j(1≤j≤Q), print the response to the j-th query.
Sample Input 1
51 2 11 3 12 4 13 5 13 12 42 34 5
Sample Output 1
324
The shortest paths for the three queries are as follows:
- Query 1: Vertex 2 → Vertex 1 → Vertex 2 → Vertex 4 : Length 1+1+1=3
- Query 2: Vertex 2 → Vertex 1 → Vertex 3 : Length 1+1=2
- Query 3: Vertex 4 → Vertex 2 → Vertex 1 → Vertex 3 → Vertex 5 : Length 1+1+1+1=4
Sample Input 2
71 2 11 3 31 4 51 5 71 6 91 7 113 21 34 56 7
Sample Output 2
51422
The path for each query must pass Vertex K=2.
Sample Input 3
101 2 10000000002 3 10000000003 4 10000000004 5 10000000005 6 10000000006 7 10000000007 8 10000000008 9 10000000009 10 10000000001 19 10
Sample Output 3
17000000000
题意:给一个无向图连通两点的经过k点的最短的路径是多少;
n个点n-1条边一定是棵树,只要dfs以k为根的树就行了..
#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<vector>#include<algorithm>using namespace std;typedef long long ll;typedef vector< pair<ll,ll> > Root;Root root[1000005];ll L[1000005];void dfs(ll r,ll fa,ll sum){ L[r]=sum; for(int i=0;i<root[r].size();i++) { if(root[r][i].first==fa) continue; dfs(root[r][i].first,r,root[r][i].second+sum); }}int main(void){ int n; cin>>n; for(int i=1;i<n;i++) { ll a,b,val; cin>>a>>b>>val; root[a].push_back(make_pair(b,val)); root[b].push_back(make_pair(a,val)); } ll que,k; cin>>que>>k; dfs(k,-1,0); while(que--) { ll a,b; cin>>a>>b; cout<<L[a]+L[b]<<endl; } return 0;}
阅读全文
1 0
- AtCoder Beginner Contest 070 Transit Tree Path
- AtCoder Beginner Contest 070 Transit Tree Path(一道鸡贼的最短路径题)
- Atcoder Transit Tree Path
- AtCoder Beginner Contest 070
- AtCoder Beginner Contest 070-D
- AtCoder Beginner Contest 070 D
- AtCoder Beginner Contest 070 ABC C++&&python
- AtCoder Beginner Contest 055
- AtCoder Beginner Contest 052
- AtCoder Beginner Contest 057
- AtCoder Beginner Contest 063
- AtCoder Beginner Contest 069
- AtCoder Beginner Contest 069
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 073
- AtCoder Beginner Contest 072
- POJ 1013 题解
- 虚析构函数问题:为什么要将基类的的析构函数设成虚的?
- 矩阵乘法
- bzoj 1878: [SDOI2009]HH的项链
- Profinet从站开发(3)- 开发必备的软硬件
- AtCoder Beginner Contest 070 Transit Tree Path
- hdu 6112
- 结构体的高级话题
- linux下查询域名或IP注册信息的操作记录(whois)
- 网页源码下载器工具(备注)
- MySQL的原地升级
- ubuntu 16.10 下安装 sonic visualizer
- 十六、基础教程-语言文字(lang)
- WEB前端开发之ES6(2)