AtCoder Beginner Contest 070 Transit Tree Path(一道鸡贼的最短路径题)
来源:互联网 发布:阿里云怎么代理加盟 编辑:程序博客网 时间:2024/06/07 03:32
D - Transit Tree Path
Time limit : 2sec / Memory limit : 256MB
Score : 400 points
Problem Statement
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.
Constraints
3≤N≤105
1≤ai,bi≤N(1≤i≤N−1)
1≤ci≤109(1≤i≤N−1)
The given graph is a tree.
1≤Q≤105
1≤K≤N
1≤xj,yj≤N(1≤j≤Q)
xj≠yj(1≤j≤Q)
xj≠K,yj≠K(1≤j≤Q)
Input
Input is given from Standard Input in the following format:
N
a1 b1 c1
:
aN−1 bN−1 cN−1
Q K
x1 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.
如题,最短路径,只是是必经过点到任一点的最短路径;
不多bb,代码如下:
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <map>#include <vector>#include <queue>using namespace std;const int N=1e5+10,INF=0x3f3f3f3f;typedef pair<int,int>P; typedef vector<int>::iterator ive;long long step[N];//步数,这里是权重 int k;map<int,vector<int> >m;map<P,int>mmp;/* P是点 ,int是亮点之间的权值*/void bfs()//以k为始,队列存点,遍历全部,广搜深搜都可以{ queue<int>q; q.push(k); step[k]=0; while(!q.empty()){ int now=q.front(); q.pop(); for(ive it=m[now].begin();it!=m[now].end();it++){ if(step[now]+mmp[P(max(*it,now),min(*it,now))]<step[*it])//条件:预防以前的路再走一遍 ,如果有更省权重的方案,就更新 { step[*it]=step[now]+mmp[P(max(*it,now),min(*it,now))]; q.push(*it); } } }}int main(){ int n,a,b,c,q,x,y; while(~scanf("%d",&n)){ memset(step,INF,sizeof(step)); m.clear(); mmp.clear(); n--; while(n--){ scanf("%d%d%d",&a,&b,&c); m[a].push_back(b);//存路径 ,因为是互通的,所以正反都存 m[b].push_back(a); mmp[P(max(a,b),min(a,b))]=c;//存权重,节省空间,规定大的在前小的在后 } scanf("%d%d",&q,&k); bfs(); while(q--){ scanf("%d%d",&x,&y); printf("%lld\n",step[x]+step[y]); } } return 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 044 C (dp)
- 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
- 数据结构概述
- 火狐flash
- Java关键字final、static使用总结
- 判断链表是否有环,并返回环的起始节点
- 控制台调试android命令
- AtCoder Beginner Contest 070 Transit Tree Path(一道鸡贼的最短路径题)
- 接触qt来第一个坑:Could not create directory "E:\oysl\QT\Error in " Util.asciify("build-untitle
- 线段树(Segment Tree)简介
- Ubuntu14.04kylin下PCL安装及环境配置
- React Native多图层View,实现empty,content,error,loading等界面无缝跳转
- angular4.0 HTTP初级,nodejs搭建服务器,并使用
- android studio 复制项目运行出现Application Installation Failed问题
- mysql 常用约束
- redis--内部结构--sds