谭松松的旅游计划

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

谭松松是一个爱旅游的人,他非常的热爱旅游,即便身体被掏空也要坚持旅游。喵蛤王国由N个城市组成,由N-1条道路连通,每条道路长度为ci,使得任意两座城市都能相互到达。谭松松有M个旅游计划,每个旅游计划有一个起点ai,一个终点bi,所以谭松松想知道,对于每个旅游计划,从起点到终点的最短路长度为多少?

Input

第一行两个整数N(2≤N≤100000,),M(1≤M≤100000),表示城市个数,谭松松的旅游计划个数。

接下来N-1行,每行三个整数li,ri,ci(1≤ci≤10000),表示li号城市和ri号城市之间有一条长度为ci的道路。

接下来M行,每行两个整数ai,bi表示旅游计划的起点和终点。

Output

输出M行,表示每个旅游计划的最短距离。

Sample input and output

Sample Input Sample Output
7 6
1 2 5
1 3 4
3 7 7
2 4 4
2 5 3
5 6 2
1 2
4 7
6 3
3 2
5 4
7 6
5
20
14
9
7
21

代码

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#define ll long long
const int MAXN=;
using namespace std; int N,M;
int pa[][MAXN],depth[MAXN],vis[MAXN];
ll cost[][MAXN];//注意long long
vector<int> G[MAXN],c[MAXN]; void dfs(int x,int pre,int d){
vis[x]=;
depth[x]=d;
pa[][x]=pre;
for(int i=;i<G[x].size();i++){
int to=G[x][i];
if(!vis[to]){
cost[][to]=c[x][i];
dfs(to,x,d+);
}
}
} void init_lca(){
memset(pa,-,sizeof(pa)); dfs(,-,);
for(int k=;k<=;k++){
for(int i=;i<=N;i++){
if(pa[k][i]>){
pa[k+][i]=pa[k][ pa[k][i] ];
cost[k+][i]=cost[k][i]+cost[k][ pa[k][i] ];
// cout<<cost[k+1][i]<<endl;
}
}
}
} ll lca(int u,int v){//long long
ll sum=;
if(depth[u]>depth[v]) swap(u,v);
// cout<<u<<v<<endl;
for(int k=;k<;k++){
if((depth[v]-depth[u])>>k&){
sum+=cost[k][v];
v=pa[k][v];//这两行不能换.....
// cout<<cost[k][u]<<endl;
}
} if(u==v) return sum;
for(int k=;k>=;k--){
if(pa[k][u]!=pa[k][v]){
sum+=(cost[k][u]+cost[k][v]);
u=pa[k][u];
v=pa[k][v];
}
}
sum+=(cost[][v]+cost[][u]);
return sum;
} int main(){
// freopen("01.in","r",stdin);
scanf("%d%d",&N,&M);
for(int i=;i<N;i++){
int x,y,cc;
scanf("%d%d%d",&x,&y,&cc);
G[x].push_back(y);
G[y].push_back(x);
c[x].push_back(cc);
c[y].push_back(cc);
}
init_lca();
while(M--){
int a,b;
scanf("%d%d",&a,&b);
printf("%lld\n",lca(a,b));//此处用cout会T!!!
}
return ;
}

Line50 和Line51换了会爆炸

然后83用cout会爆炸,直接T掉

输出1万次就得用printf

cout也就比printf慢几千倍吧~

最新文章

  1. FFmpeg滤镜实现区域视频增强 及 D3D实现视频播放区的拉大缩小
  2. 经验分享:多屏复杂动画CSS技巧三则
  3. 使用 CSS 去掉 iPhone 网页上按钮的超大圆角默认样式
  4. BZOJ-1228 E&amp;D 博弈SG+找啊找啊找规律
  5. windows鼠标消息处理与键盘模拟函数
  6. PureMVC(JS版)源码解析(四):Notifier类
  7. 【UVA】12299-RMQ with Shifts(线段树)
  8. JAVA Static方法与单例模式的理解
  9. 善用log日志
  10. Latex 去掉行号
  11. Spring Boot-JPA
  12. MySQL-分组查询(GROUP BY)及二次筛选(HAVING)
  13. 取list的值
  14. [Swift]LeetCode929. 独特的电子邮件地址 | Unique Email Addresses
  15. Insert Into select 与 Select Into 哪个更快?
  16. June 17. 2018, Week 25th. Sunday
  17. 1、js基础内容
  18. 【转】RAID 技术发展综述
  19. 搭建React项目(一):在网页中使用
  20. 利用xshell远程连接centos安装oracle11g时在图形界面登录

热门文章

  1. jquery文件上传控件 Uploadify 问题记录
  2. Multiple types were found that match the controller named &#39;Home&#39;. (weird error)
  3. golang heap container balance request
  4. C#DataGridView合计处理
  5. 在WPF中使用CefSharp嵌入浏览器
  6. OpenMesh 读写网格控制(读取写入纹理坐标,法向等)
  7. 轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)
  8. 在Salesforce中实现对Object的增删改查操作
  9. POJ 1830 高斯消元
  10. VPS -Digital Ocean -初试以及VPN的搭建