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 ;
}

最新文章

  1. asp.net identity 3.0.0 在MVC下的基本使用(一)
  2. Unity5 AssetBundle
  3. [原]Django调试工具--django-debug-toolbar
  4. synchronized 用法,实例讲解
  5. Java学习笔记之:Java String类
  6. Java7 switch新特性
  7. 【BZOJ1036】 树的统计Count (树链剖分)
  8. EasyUI 1.3之前DataGrid中动态选中、获取Checkbox
  9. C:应用于字符串处理函数
  10. Ubuntu14.04安装有道词典
  11. 分享整理的免费API接口
  12. Android简易实战教程--第二十话《通过广播接收者,对拨打电话外加ip号》
  13. h3c acl配置一列
  14. IIS 7.0的集成模式和经典模式
  15. AdminLTE用django部署
  16. T-SQL基础(一)之简单查询
  17. LeetCode 884 Uncommon Words from Two Sentences 解题报告
  18. jinkens 构建java及vue 项目
  19. 【iOS XMPP】使用XMPPFramewok(四):收发消息
  20. angular开发控制器之间的通信

热门文章

  1. 【BZOJ】【3261】最大异或和
  2. JS 时分秒验证
  3. java socket 一个服务器对应多个客户端,可以互相发送消息
  4. Python3中的新特性(1)——新的语言特性
  5. Unity3D判断鼠标向右或向左滑动,响应不同的事件
  6. JAVA float double数据类型保留2位小数点5种方法
  7. php调试工具firephp
  8. cf div2 238 D
  9. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 3(Sorting/Searching)
  10. ***PHP implode() 函数,将数组合并为字符串;explode() 函数,把字符串打散为数组