不管怎么说,这都不是道紫题吧。。。


这里采用的思想有点类似轻重链剖分。

我们按照每个节点在序列里面出现的顺序,把每一个节点连出去的边都排一个序。

这样(如果序列没错)肯定会按照序列的方式遍历完全图。

所以我们就按照这个图跑一遍BFS。

一边BFS一边查看是否符合。

程序的速度不算特别快,最优解rank11。(写丑了)


AC代码如下:

1925ms 9776kb

 #include<bits/stdc++.h>

 using namespace std;

 namespace StandardIO{

     template<typename T>inline void read(T &x){
x=;T f=;char c=getchar();
for(;c<''||c>'';c=getchar())if(c=='-')f=-;
for(;c>=''&&c<='';c=getchar())x=x*+c-'';
x*=f;
} template<typename T>inline void write(T x){
if(x<)putchar('-'),x*=-;
if(x>=)write(x/);
putchar(x%+'');
} } using namespace StandardIO; namespace Solve{ const int N=;
int n,cnt;
int a[N],b[N],vis[N];
vector<int>G[N]; inline bool cmp(int x,int y){
return a[x]<a[y];
} inline void solve(){
read(n);
for(register int i=;i<=n-;++i){
int u,v;
read(u),read(v);
G[u].push_back(v),G[v].push_back(u);
}
for(register int i=;i<=n;++i){
read(b[i]),a[b[i]]=i;
}
for(register int i=;i<=n;++i){
sort(G[i].begin(),G[i].end(),cmp);
}
queue<int>q;
q.push();
while(!q.empty()){
int now=q.front();q.pop();
if(vis[now])continue;
vis[now]=;
if(b[++cnt]!=now){
puts("No");
return;
}
for(register int i=;i<G[now].size();++i){
// cout<<G[now][i]<<endl;
q.push(G[now][i]);
}
}
puts("Yes");
}
} using namespace Solve; int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
solve();
}

题解 CF1037D 【Valid BFS?】的更多相关文章

  1. [题解] [CF1037D] Valid BFS?

    题面 题解 一个是模拟BFS的过程 还有一个是可以根据给出的BFS序构树, 再看两棵树是否相同 判断相同的话, 以同一个点为根, 看两棵树中1−

  2. CF1037D Valid BFS?

    Valid BFS? CodeForces - 1037D The BFS algorithm is defined as follows. Consider an undirected graph ...

  3. cf1037D. Valid BFS?(BFS?)

    题意 题目链接 Sol 非常妙的一道题.. 可以这样想,在BFS序中较早出现的一定是先访问的,所以把每个点连出去的边按出现的前后顺序排个序 看一下按顺序遍历出来的序列与给出的是否相同就行了 #incl ...

  4. CF 1037 D. Valid BFS?

    D. Valid BFS? http://codeforces.com/contest/1037/problem/D 题意: 给一个序列,一棵树,判断能否bfs这棵树,得到这个序列. 分析: 将每个点 ...

  5. LeetCode 题解 593. Valid Square (Medium)

    LeetCode 题解 593. Valid Square (Medium) 判断给定的四个点,是否可以组成一个正方形 https://leetcode.com/problems/valid-squa ...

  6. Codeforces | CF1037D 【Valid BFS?】

    题目大意:给定一个\(n(1\leq n\leq 2\cdot10^5)\)个节点的树的\(n-1\)条边和这棵树的一个\(BFS\)序\(a_1,a_2,\dots,a_n\),判断这个\(BFS\ ...

  7. 「CF1037D」Valid BFS?

    传送门 Luogu 解题思路 考虑直接模拟 \(\text{BFS}\) 的过程. 对于每一个节点的儿子,先遍历在输入序列中靠前的,判断 \(\text{BFS}\) 是否匹配即可. 细节注意事项 注 ...

  8. [LeetCode 题解]: Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  9. 【Codeforces 1037D】Valid BFS?

    [链接] 我是链接,点我呀:) [题意] 让你判断一个序列是否可能为一个bfs的序列 [题解] 先dfs出来每一层有多少个点,以及每个点是属于哪一层的. 每一层的bfs如果有先后顺序的话,下一层的节点 ...

随机推荐

  1. matlab张量工具初步

    最近从桑迪亚实验室下载了张量工具包.但是不太会用. 很多网上的方法, addpath(pwd) cd met; addpath(pwd) savepath M=ones(4,3,2); X=tenso ...

  2. Android官方培训课程中文版(v0.9.7)

    Android官方培训课程中文版(v0.9.7) Google Android团队在2012年的时候开设了Android Training板块 - http://developer.android.c ...

  3. miniUI打开一个新的画面(ondestroy)

    转自:http://blog.csdn.net/u012934325/article/details/77914691 需求:开发中需求通过点击父界面一个按钮弹出一个子界面,在miniUI中我们可以这 ...

  4. 【学习】JMS通信模式

    1.关于JMS的点对点模式 JMS的点对点模式下,多个消费者可以注册到同一个队列上,但是生产者的某个消息只能被一个消费者接收,在多个消费者间,生产者的消息被多个消费者循环接收,如当前有6个消息在队列中 ...

  5. hdu5321 beautiful set(莫比乌斯反演)

    设\(cnt[i]\)为权值为i的倍数的数的数量. \(f0[i],f1[i]\)分别为两种方法\(gcd=i\)的贡献是i的多少倍. \(F0[i],F1[i]\)分别为两种方法\(gcd\)为\( ...

  6. [codevs3955]最长严格上升子序列(加强版)

    题目大意:给你一个序列,要你求该序列中最长严格上升子序列的长度. 解题思路:此题算是一道LIS模板题.普通的$O(n^2)$的LIS是会TLE的,因为$n\le 1000000$,所以此题要用单调队列 ...

  7. FZU 1980 AbOr's story

    AbOr's story Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original I ...

  8. jsp-include 写法

    被包含的页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...

  9. 页面头部带loading进度指示的jQuery滚动页面特效

    这是一款非常有用且效果非常酷的jQuery页面头部带loading进度指示的滚动页面特效. 该特效在页面滚动的时候页面头部有Loading进度条指示当前页面滚动的位置,这能够让用户知道当前阅读的地方距 ...

  10. Swift环境下实现UILabel居上 居中 居下对齐

    首先在Xcode中新建.h文件,将下面代码复制进去 // // myUILabel.h // // // Created by yexiaozi_007 on 3/4/13. // Copyright ...