LuoguP3398 仓鼠找sugar
竞赛课想找一道水一点的tarjan题,看看这么久没做题手感有没有掉...
结果这题貌似不是tarjan啊...应该是LCA...假的标签!!
一遍过样例+一遍AC祭(好吧这么水的题也没啥好开心的)
大概就是给一棵树,和两条路径,判断两条路径有无公共顶点。
随便画一棵树,然后会发现,两条路径有公共部分的话,必定有一条路径(的两个端点)的LCA在另一条路径上
这样我们只要判断一个节点是否在一条路径上即可
然后联想到绝对值的几何意义(反正我是这么想到的...)满足以下规律的才有可能满足节点lca在路径a-b上
$$dis(lca,a)+dis(lca,b)==dis(a,b)$$
注意:要判断两次,因为有可能是LCA(a,b)在c-d上,也有可能是LCA(c,d)在a-b上
然后我打的树剖LCA,看着不爽的可以换成自己LCA啦
#include<cstdio>
#include<iostream>
#include<cstring>
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int M = 1e5+;
int head[M],ver[M<<],nxt[M<<],tot,n,m,idx[M],fa[M],son[M],sz[M],tp[M],dep[M];
inline void add(int x,int y){ver[++tot]=y;nxt[tot]=head[x];head[x]=tot;}
void dfs1(int x,int f){
fa[x]=f,dep[x]=dep[f]+;sz[x]=;
for(int i=head[x];i;i=nxt[i]){
if(ver[i]==f) continue;
dfs1(ver[i],x);
sz[x]+=sz[ver[i]];
if(sz[son[x]]<sz[ver[i]]) son[x]=ver[i];
}
}int t;
void dfs2(int x,int topf){
tp[x]=topf,idx[x]=++t;
if(!son[x]) return;
dfs2(son[x],topf);
for(int i=head[x];i;i=nxt[i])
if(!idx[ver[i]]) dfs2(ver[i],ver[i]);
}
int LCA(int x,int y){
while(tp[x]!=tp[y]){
if(dep[tp[x]]<dep[tp[y]]) swap(x,y);
x=fa[tp[x]];
}if(dep[x]>dep[y]) swap(x,y);
return x;
}
int DIS(int x,int y){return dep[x]+dep[y]-*dep[LCA(x,y)];}
inline bool check(int a,int b,int c,int d){
int x=LCA(a,b);
if(DIS(x,c)+DIS(x,d)==DIS(c,d)) return ;
return ;
}
int main(){
n=read(),m=read();
for(int i=,x,y;i<n;i++){
x=read(),y=read();
add(x,y),add(y,x);
}dfs1(,),dfs2(,);
while(m--){
int a=read(),b=read(),c=read(),d=read();
if(check(a,b,c,d)||check(c,d,a,b)) puts("Y");
else puts("N");
}
return ;
}
LuoguP3398 仓鼠找sugar的更多相关文章
- P3398 仓鼠找sugar
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- Luogu P3412 仓鼠找$sugar$ $II$
Luogu P3412 仓鼠找\(sugar\) \(II\) 题目大意: 给定一棵\(n\)个点的树, 仓鼠每次移动都会等概率选择一个与当前点相邻的点,并移动到此点. 现在随机生成一个起点.一个终点 ...
- 【Luogu3398】仓鼠找sugar(树链剖分)
[Luogu3398]仓鼠找sugar(树链剖分) 题面 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他 ...
- 洛谷P3398 仓鼠找sugar [LCA]
题目传送门 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- 【洛谷】【lca+结论】P3398 仓鼠找sugar
[题目描述:] 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室 ...
- [Luogu 3398] 仓鼠找sugar
[Luogu 3398] 仓鼠找sugar 又是 LCA- 前两天死活写不过的一个题今天终于顺手切了. 思路嘛参考了一楼题解. 就是说,对于 a, b, c, d 四个点, 令 x = LCA(a, ...
- 洛谷 P3398 仓鼠找sugar 解题报告
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- 【树链剖分/倍增模板】【洛谷】3398:仓鼠找sugar
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- P3398 仓鼠找sugar(树链剖分)
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
随机推荐
- hihoCoder#1120 小Hi小Ho的惊天大作战:扫雷·三
原题地址 看上去非常复杂, 实际上是这一系列最简单的一步,本质上是个搜索过程,相比于前一道题,可以不用策略三,而且题目的数据规模超级小,所以暴力搜索就能过. 把尚未确定的点放在一个unsettled列 ...
- hdu1978
{ scanf( { scanf( ;i<n;i++) ;j<m;j++) scanf( ...
- noip模拟赛 道路分组
分析:因为每一组编号都是连续的嘛,所以能分成一组的尽量分,每次加边后dfs判断一下1和n是否连通.有向图的判连通没有什么很快的方法,特别注意,并查集是错的!这个算法可以得到60分. 事实上每一次都不需 ...
- 【NOIP2017练习】鏖战字符串(斜率优化DP)
题意: 在决胜局中,Abwad决定和nbc鏖战字符串,比的是谁能更快地将一个“量子态的字符串”删除.“量子态的字符串”的每个字符都有一个删除难度dif[i].“量子态的字符串”非常顽固,只能先分割成若 ...
- C#高级编程第9版 第一章 .NET体系结构 读后笔记
.NET的CLR把源代码编译为IL,然后又把IL编译为平台专用代码. IL总是即时编译的,这一点的理解上虽然明白.当用户操作C#开发的软件时,应该是操作已经编译好的程序.那么此时安装在客户机上的程序是 ...
- Visual C++ 网络编程 笔记
第一章 网络分层模型 OSI模型应用层:服务于应用程序的协议,比如用于域名解析的DNS协议,用于下载界面内容的HTTP协议表示层:处理不同硬件和操作系统之间的差异,确保应用层之间顺利通信 and 加密 ...
- SOJ 2749_The Fewest Coins
[题意]:已知整个交易系统有N (1 ≤ N ≤ 100)种不同的货币,分别价值V1,V2,V3.......VN(1 ≤ Vi ≤ 120),FJ分别有C1,C2,C3.....CN(0 ≤ Ci ...
- linux 的硬链接与软连接
linux 里有硬链接和软连接两种概念.要明白这些概念首先要明白文件在linux 上其实有3个组成部分. data 真正的数据存储区域 inode 一个用来唯一表示data的数据结构 filename ...
- 我的arcgis培训照片11
来自:http://www.cioiot.com/successview-546-1.html
- 剑指Offer —— BFS 宽度优先打印
https://www.nowcoder.net/practice/7fe2212963db4790b57431d9ed259701?tpId=13&tqId=11175&tPage= ...