谭松松的旅游计划

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. EasyUi – 6.easyui常见问题

    1.进度条 2.JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 3. 三张表的连接查询现在到datagrid里 4.日期组合框DateBox设置readonly ...

  2. MVC基础知识 – 2.新语法

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 ...

  3. 【JAVA线程间通信技术】

    之前的例子都是多个线程执行同一种任务,下面开始讨论多个线程执行不同任务的情况. 举个例子:有个仓库专门存储货物,有的货车专门将货物送往仓库,有的货车则专门将货物拉出仓库,这两种货车的任务不同,而且为了 ...

  4. Win10 UAP 标题栏

    //自定义标题栏 var view = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); ApplicationViewTi ...

  5. 随机生成字符串-php-js

    js <script language="javascript"> function randomString(len) { len = len || 32; var ...

  6. [JavaCore] 取得类的字节码、取得类的装载器

    三种方式取得类的字节码: 1. 类名.class BranchInfoService.class 2. 对象名.getClass() branchInfoService.getClass() 3. C ...

  7. c中malloc的用法

    转自:http://blog.sina.com.cn/s/blog_966f8e8501010if7.html Malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型. ...

  8. Android学习网站

    1 <老罗Android应用开发视频教程> http://www.mobiletrain.org/about/news/android_video2.html

  9. Android中log使用方法

    private static final String ACTIVITY_TAG="MainActivity"; Log.v(MainActivity.ACTIVITY_TAG, ...

  10. loj 1377 (bfs)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1377 思路:这道题只要处理好遇到"*"这种情况就可以搞定了.我们可 ...