AOJ 2170 Marked Ancestor (基础并查集)
2024-10-19 01:27:15
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=45522
给定一棵树的n个节点,每个节点标号在1到n之间,1是树的根节点,有如下两种操作:
M v :把编号为v的节点标记。
Q v :查询与v节点距离最近的被标记的点的编号。最初只有根节点被标记。
输入n-1个数表示,每一个数是当前第i个数的父节点,输出对于每个查询得到标号的总和。
并查集与树的结合,在输入的时候就可以根据父节点的关系建立并查集,1的父亲是1.
还有把编号为v的节点标记的意思是等同于把这颗子树从并查集里面分出来。因为只要这个节点被标记,那么他的字节点一定是到这个节点的距离最小。
理解清楚这题就很简单,只涉及到查找这个操作。注意sum可能溢出。
#include<cstdio>
int par[];
int find(int x)
{
if(x==par[x]) return x;
return find(par[x]);
}
int main()
{
int n,q,a,b;
while(~scanf("%d%d",&n,&q))
{
if(n==&&q==) break;
for(int i=;i<=n;i++)
{
scanf("%d",&par[i]);
}
par[]=;
long long sum=;
char s[];
while(q--)
{
scanf("%s%d",s,&b);
if(s[]=='Q') sum+=find(b);
else if(s[]=='M') par[b]=b; //分离 b节点
}
printf("%lld\n",sum);
}
return ;
}
最新文章
- asp.net identity 3.0.0 在MVC下的基本使用(一)
- Unity5 AssetBundle
- [原]Django调试工具--django-debug-toolbar
- synchronized 用法,实例讲解
- Java学习笔记之:Java String类
- Java7 switch新特性
- 【BZOJ1036】 树的统计Count (树链剖分)
- EasyUI 1.3之前DataGrid中动态选中、获取Checkbox
- C:应用于字符串处理函数
- Ubuntu14.04安装有道词典
- 分享整理的免费API接口
- Android简易实战教程--第二十话《通过广播接收者,对拨打电话外加ip号》
- h3c acl配置一列
- IIS 7.0的集成模式和经典模式
- AdminLTE用django部署
- T-SQL基础(一)之简单查询
- LeetCode 884 Uncommon Words from Two Sentences 解题报告
- jinkens 构建java及vue 项目
- 【iOS XMPP】使用XMPPFramewok(四):收发消息
- angular开发控制器之间的通信
热门文章
- 【BZOJ】【3261】最大异或和
- JS 时分秒验证
- java socket 一个服务器对应多个客户端,可以互相发送消息
- Python3中的新特性(1)——新的语言特性
- Unity3D判断鼠标向右或向左滑动,响应不同的事件
- JAVA float double数据类型保留2位小数点5种方法
- php调试工具firephp
- cf div2 238 D
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 3(Sorting/Searching)
- ***PHP implode() 函数,将数组合并为字符串;explode() 函数,把字符串打散为数组