题目链接:

F - Auxiliary Set

HDU - 5927

学习网址:https://blog.csdn.net/yiqzq/article/details/81952369
题目大意一棵节点数为n的有根数,根节点为1,一开始所有的点都是重点,接下来有q次询问,每次询问把m个点变为轻点,问你树中还有多少个重点。 
重点应该满足的条件为: 
1.它本身是重点。 
2.它为两个重点的最近公共祖先。 
每次询问之后在下次询问前,所有的点都恢复为重点。

具体思路:对于每个点保存他的深度。因为每次输入的数不重要的点,首先对于这些不重要的点按照深度从大到小进行排序, 然后先去处理深度大的。当处理深度大的时候,可以保证这个节点下面是没有不重要的点的,也就是这个节点的下面全都是重要的节点,那么这个点也肯定是符合的。然后往上更新的时候,如果当前的不重要节点下面没有点了,那么这个不重要节点的父亲往下的儿子数就应该减去1,也就是说这个分支下不存在重要的节点了。

AC代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. # define ll long long
  4. const int maxn = 2e5+;
  5. int n,m;
  6. vector<int>edge[maxn];
  7. void addedge(int fr,int to)
  8. {
  9. edge[fr].push_back(to);
  10. }
  11. int sto[maxn];
  12. int depth[maxn];
  13. int son1[maxn],son2[maxn];
  14. int father[maxn];
  15. void init()
  16. {
  17. for(int i=; i<=n; i++)
  18. {
  19. edge[i].clear();
  20. son1[i]=;
  21. }
  22. }
  23. void dfs(int cur,int fa,int dep)
  24. {
  25. father[cur]=fa;
  26. depth[cur]=dep+;
  27. for(int i=; i<edge[cur].size(); i++)
  28. {
  29. int to=edge[cur][i];
  30. if(to==fa)
  31. continue;
  32. son1[cur]++;
  33. dfs(to,cur,dep+);
  34. }
  35. }
  36. bool cmp(int t1,int t2)
  37. {
  38. return depth[t1]>depth[t2];
  39. }
  40. int main()
  41. {
  42. int T;
  43. int Case=;
  44. scanf("%d",&T);
  45. while(T--)
  46. {
  47. int st,ed;
  48. scanf("%d %d",&n,&m);
  49. init();
  50. for(int i=; i<n; i++)
  51. {
  52. scanf("%d %d",&st,&ed);
  53. addedge(st,ed);
  54. addedge(ed,st);
  55. }
  56. printf("Case #%d:\n",++Case);
  57. dfs(,,);
  58. while(m--)
  59. {
  60. int sz,ans;
  61. scanf("%d",&sz);
  62. ans=n-sz;
  63. for(int i=; i<=sz; i++)
  64. {
  65. scanf("%d",&sto[i]);
  66. son2[sto[i]]=son1[sto[i]];
  67. }
  68. sort(sto+,sto+sz+,cmp);
  69. for(int i=; i<=sz; i++)
  70. {
  71. if(son2[sto[i]]>=)
  72. ans++;
  73. if(son2[sto[i]]==)
  74. son2[father[sto[i]]]--;
  75. }
  76. printf("%d\n",ans);
  77. }
  78. }
  79. return ;
  80. }

F - Auxiliary Set HDU - 5927 (dfs判断lca)的更多相关文章

  1. HDU 3966 dfs序+LCA+树状数组

    题目意思很明白: 给你一棵有n个节点的树,对树有下列操作: I c1 c2 k 意思是把从c1节点到c2节点路径上的点权值加上k D c1 c2 k 意思是把从c1节点到c2节点路径上的点权值减去k ...

  2. 蓝皮书:异象石 【dfs序+lca】

    题目详见蓝皮书[算法竞赛:进阶指南]. 题目大意: 就是给你一颗树,然后我们要在上面进行三种操作:  1.标记某个点  或者  2.撤销某个点的标记  以及   3.询问标记点在树上连通所需的最短总边 ...

  3. hdu 5188 dfs+二分

    get了很多新技能 当时想到了用dfs,但是排序用的是限制时间排序,一直没搞出来. 正解: 二分用时,dfs判断,为了顺利进行做题,需要按照做题开始时间排序 还可以用dp 题意: 作为史上最强的刷子之 ...

  4. HDU 5143 DFS

    分别给出1,2,3,4   a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...

  5. hdu 5167(dfs)

    Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  6. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  7. DFS判断连通图

    因为是连通图,所以从任意一点出发,一定可以通过一遍深度优先遍历就能走过所有的点和边,就可以利用这个性质来很容易的通过DFS判断图是否为连通图 下面是具体算法:

  8. HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  9. HDU 5927 Auxiliary Set (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5927 题意: 给你一棵树,其中有一些'不重要'的点,要是这些'不重要'的点的子树中有两个重要的点的LC ...

随机推荐

  1. 打印慢sql的日志

  2. 运用tp5上传图片,并生成缩略图

    最近想做个相册,需要用到上传图像,并且考虑到性能问题,还要生成缩略图,就学习下.在网上看了很多大神写的文章,经过各种调试总算出来了,分享下.不好之处,多多指教 ​ ​ ps:运用tp5图片类生成缩略图 ...

  3. SpringCloud之注册中心Eureka搭建

    POM: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...

  4. flask models循环使用和migrate迁移脚本

    使用models目的是为了将创建数据库模型的代码与主程序代码分离,migrate的作用就是在数据库字段改变时不用drop表直接做更新操作 新建 models.py  exts.py manage.py ...

  5. weblogic优化(内存、线程数和启动速度)

    一.为服务分配内存 1.一般如果服务所需的内存不一样,需要单独指定的话,我们是通过拷贝startWebLogic.sh文件,拷贝为startNode.sh(名字随意) 2.然后在startNode.s ...

  6. JAVA核心技术I---JAVA基础知识(抽象类和接口)

    一:抽象类 (一)定义 类:属性(0或多个)+方法(0或多个)一个完整(健康)的类:所有的方法都有实现(方法体)类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类一个完整的类才可以被实例化, ...

  7. 设计模式---接口隔离模式之适配器模式(Adapter)

    一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不 ...

  8. PHP7 网络编程(二)daemon守护进程

    前言 在一个多任务的计算机操作系统中,守护进程(英语:daemon,/ˈdiːmən/或/ˈdeɪmən/)是一种在后台执行的计算机程序.此类程序会被以进程的形式初始化.守护进程程序的名称通常以字母“ ...

  9. java中获取request与response对象的方法

    Java 获取Request,Response对象方法   第一种.参数 @RequestMapping("/test") @ResponseBody public void sa ...

  10. oldboy s21day05

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.请将列表中的每个元素通过 "_" 链接起来.'''users = ['李少奇','李 ...