题目链接:点击查看

题目大意:给出一棵 n 个点的树,再给出 m 个关键点,问是否存在着一个点到 m 个关键点的距离都相同,存在的话输出任意一个即可

题目分析:bfs 按层展开维护贡献就好了,记录一下每个点在同一层最多被多少个关键点覆盖

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;bool vis[N];int n,m,deep[N],num[N];vector<int>node[N];void bfs()
{queue<int>q;for(int i=1;i<=n;i++)if(vis[i]){q.push(i);deep[i]=1;num[i]=1;}while(q.size()){int u=q.front();q.pop();for(auto v:node[u])if(deep[v]==0||deep[v]==deep[u]+1){num[v]+=num[u];if(!vis[v]){vis[v]=true;deep[v]=deep[u]+1;q.push(v);}}}
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&m);for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);node[v].push_back(u);}for(int i=1;i<=m;i++){int x;scanf("%d",&x);vis[x]=true;}bfs();for(int i=1;i<=n;i++)if(num[i]>=m){puts("YES");printf("%d\n",i);goto end;}puts("NO");end:;return 0;
}

中石油训练赛 - Equidistant(bfs)相关推荐

  1. 中石油训练赛 - 斗地主(bfs)

    题目链接:点击查看 题目大意:给出斗地主的规则,以及最终分数,求出最少需要进行几局游戏 题目分析:bfs爆搜即可,因为数据范围比较小,我一开始没多想,直接18种情况全部打上去,交了一发T掉了..bfs ...

  2. 中石油训练赛 - Trading Cards(最大权闭合子图)

    题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化 题目分析:最大权闭合子图的模 ...

  3. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

  4. 中石油训练赛 - Perfect Tree(dfs)

    题目描述 Given a positive integer k, we define a rooted tree to be k-perfect, if and only if it meets bo ...

  5. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

  6. 中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)

    题目大意:在二维平面中给出 n 个点,再给出一个固定大小的圆,问如何放置这个圆可以使其覆盖最多的点 题目分析:首先不难想到一种 n^3 的做法,就是两层循环去枚举两个点,因为两个不同的点就可以确定下来 ...

  7. 中石油训练赛 - Russian Dolls on the Christmas Tree(树上启发式合并/主席树)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树,以点 1 为根,现在对于每个节点作为根的子树求解:子树中有多少个编号不相交的连续子段,如:1 2 4 5 7,共有三个连续的段,分别为 [ 1 ...

  8. 中石油训练赛 - Check List(线段树维护偏序问题)

    题目大意:给出 n 个点,需要计算出满足下列条件的三元对 ( i , j , k ) 的数量: x[ i ] < x[ j ] < x[ k ] y[ k ] > y[ i ] &g ...

  9. 中石油训练赛 - Bad Treap(数学)

    题目链接:点击查看 题目大意:给出笛卡尔树的定义,现在要求给出 n 个点对 ( x , sin( x ) ),使得笛卡尔树的高度尽可能大 题目分析:如果想让笛卡尔树的高度尽可能大,令其退化为一条链即可 ...

最新文章

  1. 光伏双反闹剧何时休?
  2. 自制操作系统学习笔记(1)-虚拟机启动软盘
  3. 云服务器可以安装操作系统么,云服务器安装操作系统吗
  4. 【数据结构与算法】之深入解析“石子游戏VI”的求解思路与算法示例
  5. bat脚本中如何多次键盘输入并判断_电脑上如何多开微信?PC端多开微信的方法
  6. working space和working set关系
  7. OpenZeppelin集成Truffle编写健壮安全的合约
  8. 关于使用IDEA导入项目后依赖报错的解决方案
  9. 简明Github使用教程(桌面客户端与网页版)
  10. iOS NSString的常用用法
  11. element ui的时间选择器
  12. Linux文件压缩与打包-1
  13. Java、对字符串中的字符排序
  14. 求三角形【内心,外心,重心,垂心】
  15. 消费金融公司可开展哪些业务类型?
  16. 电脑时间校准方法,怎么校准电脑时间
  17. 色谱柱L分类保存与使用注意事项 【Chro】
  18. gabor 变换matlab,Gabor变换到底是什么鬼?
  19. java设计模式-设配器模式
  20. 戴尔游匣G15 系统蓝屏问题解决的方法

热门文章

  1. java redis 数据自过期_Java架构-Redis的内存回收策略和Key过期策略,看这篇就够了...
  2. 接口调试利器:Postman
  3. MySQL高级 - SQL技巧 - SQL执行顺序及正则表达式
  4. Canal数据同步策略
  5. 使用Dockerfile构建SpringBoot应用镜像
  6. 关联查询的延迟加载是怎么实现的?
  7. @Conditional进行条件判断等
  8. 使用JWT进行跨域身份验证
  9. 使用RSA算法生成令牌
  10. 注解_案例_简单的测试框架