码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P2912 [USACO08OCT]牧场散步Pasture Walking

时间:2017-09-11 15:16:41      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:sed   swa   view   usaco   pre   closed   code   ret   splay   

P2912 [USACO08OCT]牧场散步Pasture Walking

lca

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define maxn 1000000
 4 int n,num,m,x,y,z,head[maxn],q,size[maxn],top[maxn],deep[maxn],fa[maxn],dis[maxn];
 5 struct Edge{
 6     int to,next,dis;
 7 }edge[maxn];
 8 
 9 void ins(int u,int v,int d)
10 {
11     edge[++num].to=v;
12     edge[num].next=head[u];
13     edge[num].dis=d;
14     head[u]=num;
15 }
16 
17 void dfs(int x)
18 {
19     size[x]=1; deep[x]=deep[fa[x]]+1;
20     for(int i=head[x];i;i=edge[i].next)
21     {
22         int v=edge[i].to;
23         if(fa[x]!=v)
24         {
25             fa[v]=x;
26             dis[v]=dis[x]+edge[i].dis;
27             dfs(v);
28             size[x]+=size[v];
29         }
30     }
31 }
32 
33 void dfs2(int x)
34 {
35     int t=0; if(!top[x]) top[x]=x;
36     for(int i=head[x];i;i=edge[i].next)
37     {
38         int v=edge[i].to;
39         if(fa[x]!=v&&size[t]<size[v]) t=v;
40     }
41     if(t) top[t]=top[x],dfs2(t);
42     for(int i=head[x];i;i=edge[i].next)
43     {
44         int v=edge[i].to;
45         if(fa[x]!=v&&t!=v) dfs2(v);
46     }
47     
48 }
49 
50 int lca(int x,int y)
51 {
52     while(top[x]!=top[y])
53     {
54         if(deep[top[x]]<deep[top[y]]) swap(x,y);
55         x=fa[top[x]];
56     }
57     return deep[x]<deep[y]?x:y;
58 }
59 
60 int main()
61 {
62     scanf("%d%d",&n,&q);
63     for(int i=1;i<n;i++)
64         scanf("%d%d%d",&x,&y,&z),ins(x,y,z),ins(y,x,z);
65     dfs(1); dfs2(1);
66     while(q--)
67     {
68         scanf("%d%d",&x,&y);
69         printf("%d\n",dis[x]+dis[y]-(dis[lca(x,y)])*2);
70     }
71     return 0;
72 }
View Code

 

洛谷 P2912 [USACO08OCT]牧场散步Pasture Walking

标签:sed   swa   view   usaco   pre   closed   code   ret   splay   

原文地址:http://www.cnblogs.com/chen74123/p/7504883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!