题目链接:http://codeforces.com/problemset/problem/1037/D

题目大意:

给出一棵树,询问一个序列是否可能为这棵树从节点1开始遍历的bfs序

题解:

对于每个节点,令其权值等于该元素在给序列中出现的位置

把每个节点的出边按照到达点的权值排序,来一次bfs得到一个bfs序,判断当前bfs序与给定序列是否相等即可

  1. #include<algorithm>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<iostream>
  5. #include<vector>
  6. #include<queue>
  7. using namespace std;
  8.  
  9. const int N=2e5+;
  10. int n,m,s;
  11. int vis[N],giv[N],u[N],v[N],pos[N];
  12. struct node
  13. {
  14. int y,val;
  15. };
  16. bool operator < (node x,node y) {return x.val<y.val;}
  17. vector<node> g[N];
  18. vector <int> p;
  19. inline int read()
  20. {
  21. char ch=getchar();
  22. int s=,f=;
  23. while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
  24. while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
  25. return s*f;
  26. }
  27. void bfs()
  28. {
  29. queue <int> q;
  30. vis[]=;
  31. q.push();
  32. while (!q.empty())
  33. {
  34. int k=q.front();q.pop();
  35. p.push_back(k);
  36. for (int i=;i<g[k].size();i++)
  37. {
  38. int y=g[k][i].y;
  39. if (vis[y]) continue;
  40. vis[y]=;
  41. q.push(y);
  42. }
  43. }
  44. }
  45. int main()
  46. {
  47. n=read();
  48. for (int i=;i<n;i++)
  49. {
  50. u[i]=read();v[i]=read();
  51. }
  52. for (int i=;i<=n;i++)
  53. {
  54. giv[i]=read();
  55. pos[giv[i]]=i;
  56. }
  57. for (int i=;i<n;i++)
  58. {
  59. g[u[i]].push_back((node){v[i],pos[v[i]]});
  60. g[v[i]].push_back((node){u[i],pos[u[i]]});
  61. }
  62. for (int i=;i<=n;i++) sort(g[i].begin(),g[i].end());
  63. /*for (int i=1;i<=n;i++)
  64. {
  65. for (int j=0;j<g[i].size();j++) printf("%d ",g[i][j].val);
  66. printf("\n");
  67. }*/
  68. bfs();
  69. bool flag=;
  70. for (int i=;i<=n;i++) if (p[i-]!=giv[i]) {flag=;break;}
  71. if (flag) puts("Yes");
  72. else puts("No");
  73. return ;
  74. }

[codeforces 1037D] Valid BFS? 解题报告(验证bfs序,思维题)的更多相关文章

  1. Codeforces Round 662 赛后解题报告(A-E2)

    Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...

  2. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  3. 【LeetCode】36. Valid Sudoku 解题报告(Python)

    [LeetCode]36. Valid Sudoku 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址 ...

  4. 【LeetCode】593. Valid Square 解题报告(Python)

    [LeetCode]593. Valid Square 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地 ...

  5. Codeforces Round #277.5 解题报告

    又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...

  6. POJ 3126 Prime Path 解题报告(BFS & 双向BFS)

    题目大意:给定一个4位素数,一个目标4位素数.每次变换一位,保证变换后依然是素数,求变换到目标素数的最小步数. 解题报告:直接用最短路. 枚举1000-10000所有素数,如果素数A交换一位可以得到素 ...

  7. codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题

    http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...

  8. [Codeforces 1037D] Valid BFS?

    [题目链接] http://codeforces.com/problemset/problem/1037/D [算法] 首先求出每个点的父节点 , 每棵子树的大小 然后判断BFS序是否合法即可 时间复 ...

  9. POJ3669解题报告(bfs)

    POJ3669http://poj.org/problem?id=3669 很明显是一道bfs的题目 由于陨石的降临具有时刻性,所以地图是随时间变化的, 所以可以使用结构体来存储陨石下落的时刻以及位置 ...

随机推荐

  1. redis windows安装与使用

    是什么 Redis(Remote Dictionary Server)远程字典服务器 开源免费 C语言编写的 key/value分布式内存数据库,基于内存运行 Redis支持数据的持久化,可以将内存中 ...

  2. [Swift]二进制、八进制、十进制、十六进制之间的转换

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. [makefile]如何设置不同目录的代码(.c),生成到指定目录下(./debug/.o))

    部分代码跟makefile不在同一目录,有没有好的方法来设置依赖关系,我找到三种方法,但感觉都不完美,下面我会把他列出来并加以说明,不知有没有更好的方法,makefile本身也不是很熟,请大家指教: ...

  4. Spark RDD概念学习系列之如何创建Pair RDD

    不多说,直接上干货! 创建Pair RDD Python语言 pairs = lines.map(lambda x: (x.split(], x))  scala语言 val pairs = line ...

  5. centos7 usually use

    firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.22.103 port port=8 ...

  6. Python 接口类或抽象类 反射

    # 抽象类或者接口类,制定规范,统一方法名 # # 抽象类或者接口类,制定规范,统一方法名 from abc import ABCMeta,abstractmethod class Payrole(m ...

  7. 【WPF】这可能是全网最全的拖拽实现方法的总结

    原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口.控件等内容的 ...

  8. HDU 1348 Wall ( 凸包周长 )

    链接:传送门 题意:给出二维坐标轴上 n 个点,这 n 个点构成了一个城堡,国王想建一堵墙,城墙与城堡之间的距离总不小于一个数 L ,求城墙的最小长度,答案四舍五入 思路:城墙与城堡直线长度是相等的, ...

  9. [poj 2976] Dropping tests (分数规划 二分)

    原题: 传送门 题意: 给出n个a和b,让选出n-k个使得(sigma a[i])/(sigma b[i])最大 直接用分数规划.. code: //By Menteur_Hxy #include & ...

  10. 8:30+1.5小时,返回时间格式的 php函数

    一个实用的自定义函数 /** * 传入8:30格式的开始时间,和小数形式的小时长度,返回结束时间 * @param [type] $start [description] 8:30 * @param ...