博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LCA || BZOJ 1602: [Usaco2008 Oct]牧场行走 || Luogu P2912 [USACO08OCT]牧场散步Pasture Walking
阅读量:4553 次
发布时间:2019-06-08

本文共 1336 字,大约阅读时间需要 4 分钟。

题面:

题解:LCA模版题

代码:

1 #include
2 #include
3 #include
4 using namespace std; 5 const int maxn=1000,max_log=10; 6 int N,Q,F[maxn+5][max_log+2],edge_head[maxn+5],num_edge=0,c,Dep[maxn+5],u,v,w,A,B; 7 int Sig[maxn+5]; 8 struct Edge{ 9 int to,nx,dis;10 }edge[(maxn<<1)+5];11 inline void Add_edge(int from,int to,int dis){12 edge[++num_edge].nx=edge_head[from];13 edge[num_edge].to=to;14 edge[num_edge].dis=dis;15 edge_head[from]=num_edge;16 return;17 }18 inline void Dfs(int x,int fa){19 Dep[x]=Dep[fa]+1;20 F[x][0]=fa;21 for(int i=1;i<=max_log;i++)22 F[x][i]=F[F[x][i-1]][i-1];23 for(int i=edge_head[x];i;i=edge[i].nx){24 int y=edge[i].to;25 if(y==fa)continue; 26 Sig[y]=Sig[x]+edge[i].dis;27 Dfs(y,x);28 }29 return;30 }31 inline int LCA(int x,int y){32 if(Dep[x]
=0;i--){36 int a;a=F[x][i];37 if(Dep[a]>=Dep[y])x=a;38 if(x==y)return x;39 } 40 for(int i=max_log;i>=0;i--){41 int a,b;a=F[x][i];b=F[y][i];42 if(a!=b){43 x=a;y=b;44 }45 }46 return F[x][0];47 }48 int main(){49 scanf("%d%d",&N,&Q);50 for(int i=1;i

By:AlenaNuna

转载于:https://www.cnblogs.com/AlenaNuna/p/10470148.html

你可能感兴趣的文章
剑指offer 二叉树的bfs
查看>>
LeetCode Maximum Subarray
查看>>
单元测试框架"艾信.NET单元测试工具(AssionUnit)"开发---第二步
查看>>
git 项目最常用命令总结
查看>>
[Arduino] 在串口读取多个字符串,并且转换为数字数组
查看>>
4.1.6 Grundy数-硬币游戏2
查看>>
图像处理的软件
查看>>
Sql 2000系统表 语句查询表结构
查看>>
day 37 并发编程和操作系统的发展史 + 进程
查看>>
面试问题总结
查看>>
让我们再聊聊浏览器资源加载优化
查看>>
underscore demo
查看>>
CSS hack
查看>>
C# Enum Name String Description之间的相互转换
查看>>
Android 实现ripple动画
查看>>
PHP wamp server问题
查看>>
Spring Data Redis学习
查看>>
js闭包理解案例-解决for循环为元素注册事件的问题
查看>>
2015.04.23,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 33
查看>>
Spring+SpringMVC+JDBC实现登录
查看>>