谭松松的旅游计划

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慢几千倍吧~

CDOJ 1437 谭松松的旅游计划 Label:倍增LCA && 最短路的更多相关文章

  1. 洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  2. 【BZOJ2117】 [2010国家集训队]Crash的旅游计划

    [BZOJ2117] [2010国家集训队]Crash的旅游计划 Description 眼看着假期就要到了,Crash由于长期切题而感到无聊了,因此他决定利用这个假期和好友陶陶一起出去旅游. Cra ...

  3. [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树

    [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树 题目大意: 给出一个\(n(n\le10^5)\)个结点的树,每条边有 ...

  4. 思维导图哪款好用?怎么借助MindManager 做旅游计划

    世界那么大,想不想去看看!想不想来一场说走就走的旅行?尤其是在新冠的笼罩下, 2020年已经过去四分之三,国内疫情已经基本得到了控制,接下来的日子里你想出门好好玩玩吗? 说走就走的旅游虽然美好,但是你 ...

  5. CDOJ 1401 谭爷的黑暗沙拉 数学

    谭爷的黑暗沙拉 题目连接: http://mozhu.today/#/problem/show/1401 Description 谭爷有\(n\)种不同种类的食材(水果&蔬菜),他想做出一份总 ...

  6. [BZOJ2117]Crash的旅游计划

    Description 眼看着假期就要到了,Crash由于长期切题而感到无聊了,因此他决定利用这个假期和好友陶陶一起出去旅游. Crash和陶陶所要去的城市里有N (N > 1) 个景点,Cra ...

  7. [2010国家集训队]Crash的旅游计划

    Description 眼看着假期就要到了,Crash由于长期切题而感到无聊了,因此他决定利用这个假期和好友陶陶一起出去旅游. Crash和陶陶所要去的城市里有N (N > 1) 个景点,Cra ...

  8. BZOJ2117: [2010国家集训队]Crash的旅游计划

    裸点分,点分树每层维护有序表,查询二分,复杂度$O(nlog^3n)$. #include<bits/stdc++.h> #define M (u+v>>1) #define ...

  9. cdoj 树上战争(Battle on the tree) Label:并查集?

    给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜. Input 输入包含多组数据 每组第 ...

随机推荐

  1. Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..

    对于Android初学者以及对于我们菜鸟,这些大神们开发的轻量级框架非常有用(更别说开源的了). 下面转载这10个框架的介绍:(按顺序来吧没有什么排名). 一.  Afinal 官方介绍: Afina ...

  2. Log4Net配置以及使用

    跟踪程序代码,及时发现程序的运行状态,是每个成熟的软件所必不可少的一个环节,网站发布到真实的环境之后,对于程序的运行状态,我们并不能想开发环境那也,点击调试.日志记录显示就尤为重要,在.NET中记录日 ...

  3. 恢复 git reset -hard 的误操作

    有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...

  4. jqueryEasyUI:tabs扩展:给tabs组件绑定双击事件 分类: JqueryEasyUI 2014-09-29 14:36 537人阅读 评论(0) 收藏

    实现代码: $.extend($.fn.tabs.methods, { /** * 绑定双击事件 * @param {Object} jq * @param {Object} caller 绑定的事件 ...

  5. 二、activity与Intent

    (一) 多个activity之间的跳转(无值传递) 第一步:创建activity(其实就是jave文件),并进行注册 在AndroidManifest.xml中 <activity androi ...

  6. ThinkPHP中使用ajaxReturn进行ajax交互

    以管理员登录为例来介绍下$this->ajaxReturn与模板页进行ajax交互使用方法 首先看PHP控制器的处理,在application/Admin/Controller/LoginCon ...

  7. 【leetcode】Sqrt(x)

    题目描述: Implement int sqrt(int x). Compute and return the square root of x. 实现开根号,并且返回整数值(这个很重要,不是整数的话 ...

  8. barabasilab-networkScience学习笔记4-无标度特征

    第一次接触复杂性科学是在一本叫think complexity的书上,Allen博士很好的讲述了数据结构与复杂性科学,barabasi是一个知名的复杂性网络科学家,barabasilab则是他所主导的 ...

  9. Linux之find命令用于统计信息

    1. 计算当前目录中的文件数: [root@localhost tmp]# find . -type f | wc -l 2. 查找/etc目录中最新的和最旧的文件,以文件时间排序并按年-月-日的格式 ...

  10. 组合数问题hdu5894

    http://acm.hdu.edu.cn/showproblem.php?pid=5894 题意如上