T1503 愚蠢的宠物 codevs
http://codevs.cn/problem/1503/
大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜)。有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了……
狗狗的家因为常常遭到猫猫的攻击,所以不得不把家里前院的路修得非常复杂。狗狗家前院有N个连通的分叉结点,且只有N-1条路连接这N个节点,节点的编号是1-N(1为根节点)。sheep的宠物非常笨,他们只会向前走,不会退后(只向双亲节点走),sheep想知道他们最早什么时候会相遇(即步数最少)。

第1行:一个正整数N,表示节点个数。
第2~N行:两个非负整数A和B,表示A是B的双亲。(保证A,B<=n)
第N+1行:两个非负整数A和B,表示两只宠物所在节点的位置。(保证A,B<=n)
输出他们最早相遇的节点号。
10
1 2
1 3
1 4
2 5
2 6
3 7
4 8
4 9
4 10
3 6
1
对于10%的数据,n<10^6
对于100%的数据,n<=10^6
#include <algorithm>
#include <cstdio>
#define maxn 100015 using namespace std; int n,a,b,ans;
int fa[maxn];
bool vis[maxn]; void will_go(int x)
{
vis[x]=;
if(!vis[fa[x]])
will_go(fa[x]);
} int meet(int x)
{
if(vis[x])
return x;
else
meet(fa[x]);
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<n;i++)
{
scanf("%d%d",&a,&b);
fa[b]=a;
}
scanf("%d%d",&a,&b);
will_go(a);
ans=meet(b);
printf("%d",ans);
return ;
}
并查集,搜a会经过的节点,用b去相遇
#include <algorithm>
#include <iostream>
#include <cstdio>
#define maxn 1000015 using namespace std; int n,a,b,s,t,ans;
int fa[maxn]; int find(int x)
{
if(x!=fa[x])
return fa[x]=find(fa[x]);
return x;
} int get(int x,int y)
{
if(x==find(y))
{
return x;
exit();
}
else
if(find(x)==y)
{
return y;
exit();
}
else
{
get(fa[x],y);
get(x,fa[y]);
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<n;i++)
{
scanf("%d%d",&a,&b);
fa[find(b)]=find(a);
}
scanf("%d%d",&s,&t);
ans=get(s,t);
printf("%d",ans);
return ;
}
并不知道怎么错的
#include <algorithm>
#include <cstdio>
#include <vector> using namespace std; const int N=1e6+;
vector<int>vec[N];
int n,x,y,deep[N],dad[N][]; void DFS(int x)
{
deep[x]=deep[dad[x][]]+;
for(int i=;i<dad[x][i];i++)
dad[x][i+]=dad[dad[x][i]][i];
for(int i=;i<vec[x].size();i++)
if(vec[x][i]!=dad[x][]) dad[vec[x][i]][]=x,DFS(vec[x][i]);
} int LCA(int x,int y)
{
if(deep[x]>deep[y]) swap(x,y);
for(int i=;i>=;i--)
if(deep[dad[y][i]]>=deep[x]) y=dad[y][i];
if(x==y) return x;
for(int i=;i>=;i--)
if(dad[x][i]!=dad[y][i])
x=dad[x][i],y=dad[y][i];
return dad[x][];
} int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
vec[x].push_back(y);
vec[y].push_back(x);
}
DFS();
scanf("%d%d",&x,&y);
printf("%d",LCA(x,y));
return ;
}
LCA倍增法
T1503 愚蠢的宠物 codevs的更多相关文章
- codevs——1503 愚蠢的宠物
1503 愚蠢的宠物 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 大家都知道,sheep有两 ...
- [codevs 1503]愚蠢的宠物(特殊的LCA)
题目:http://codevs.cn/problem/1503/ 分析:一道裸的LCA,但是由于询问只有一次,所以可以简单打打……可以从a,b向父节点推直到1节点,然后比较两个序列,后面一段肯定相同 ...
- CodeVS 1503 愚蠢的宠物
题目描述 Description 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 狗狗的家因为常常遭到猫猫的 ...
- rqnoj28[stupid]愚蠢的宠物
题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 描述 狗狗的家因为常常遭到猫猫的攻击,所以不 ...
- 【rqnoj28】[Stupid]愚蠢的宠物
题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 描述 狗狗的家因为常常遭到猫猫的攻击,所以不 ...
- PID28 [Stupid]愚蠢的宠物
题链:https://www.rqnoj.cn/problem/28 题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只 ...
- RNQOJ PID28 / [Stupid]愚蠢的宠物
勉勉强强够着点并查集的边,题目吧他分类到并查集也无可厚非,这里与常规的并查集的区别在于要做一个mark数组进行一下标记,展开来说就是对于要查询的A,B,先对A进行处理,把A所有的前驱也就是双亲节点进行 ...
- [题解] codevs 1486 愚蠢的矿工
http://codevs.cn/problem/1486/ 我们比较熟悉二叉树,题目中给出的是一棵多叉树,我们需要将这可二叉树改造成二叉树. 二叉树可以为这样的: 父亲结点左边储存儿子,右边储存兄弟 ...
- codevs愚蠢的矿工(树形DP)
/* 树形DP 根节点一定有人 然后 剩下的人没到每个孩子去 因为孩子数可能很多 不好枚举 所以转二叉树 分两部分 O(sum)就可以了 当然 转二叉树候必须顾及原来树的一些性质 如不能只选左孩子 转 ...
随机推荐
- laravel学习笔记(三)
模型传值 路由: Route::get('/posts/{post}','\App\Http\Controllers\PostController@show'); 方法: public functio ...
- vSphere Client用户名密码保存记录
vSphere Client在访问ESXi主机或vCenter后是默认不保存登录用户名和密码的,不过可以通过修改配置文件来保存,方便访问连接. 方法如下: 打开配置文件路径(实际安装路径):D:\Pr ...
- ECharts是我接触过的最优秀的可视化工具,也是进步最快的软件,希望它早日成为世界级的开源项目。
ECharts的广泛网址: http://echarts.baidu.com/doc/example.html 零编程玩转图表: http://tushuo.baidu.com/?qq-pf-to=p ...
- 我所理解的MVVM
将UI中的数据适配.交互处理: controller中与UI密切相关的功能: 剥离出来,形成单独的模块: 以增加UI和Controller的灵活性.
- EXPLAIN - 显示语句执行规划
SYNOPSIS EXPLAIN [ ANALYZE ] [ VERBOSE ] statement DESCRIPTION 描述 这条命令显示PostgreSQL规划器为所提供的语句生成的执行规划. ...
- Mac 查看端口情况
一个进程可以占用多个端口. 查看某个进程占用哪些端口: lsof -nP | grep TCP | grep -i 进程名 ➜ cocos_creator lsof -nP | grep TCP | ...
- MFC (Combo-box control)下拉列表控件的使用
1.可以选择,但无法编辑状态: 选择下拉框的属性中的类型(Type)参数——Drop List; 2.如何控制Combo Box的下拉长度 1,一.在资源文件中打开对话框,选中Combo Box控件, ...
- NOIp2018 提高组初赛试题参考答案
- Python中的函数(2)
一.实参和形参 def greet_user(username): """显示简单的问候语,且显示用户名""" print(& ...
- LeetCode(78) Subsets
题目 Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset m ...