题解 CF1037D 【Valid BFS?】

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


 

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

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

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

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

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

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


 

AC代码如下:

1925ms 9776kb

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 namespace StandardIO{
 6 
 7     template<typename T>inline void read(T &x){
 8         x=0;T f=1;char c=getchar();
 9         for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
10         for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
11         x*=f;
12     }
13 
14     template<typename T>inline void write(T x){
15         if(x<0)putchar('-'),x*=-1;
16         if(x>=10)write(x/10);
17         putchar(x%10+'0');
18     }
19 
20 }
21 
22 using namespace StandardIO;
23 
24 namespace Solve{
25     
26     const int N=200200;
27     int n,cnt;
28     int a[N],b[N],vis[N];
29     vector<int>G[N];
30     
31     inline bool cmp(int x,int y){
32         return a[x]<a[y];
33     }
34     
35     inline void solve(){
36         read(n);
37         for(register int i=1;i<=n-1;++i){
38             int u,v;
39             read(u),read(v);
40             G[u].push_back(v),G[v].push_back(u);
41         }
42         for(register int i=1;i<=n;++i){
43             read(b[i]),a[b[i]]=i;
44         }
45         for(register int i=1;i<=n;++i){
46             sort(G[i].begin(),G[i].end(),cmp);
47         }
48         queue<int>q;
49         q.push(1);
50         while(!q.empty()){
51             int now=q.front();q.pop();
52             if(vis[now])continue;
53             vis[now]=1;
54             if(b[++cnt]!=now){
55                 puts("No");
56                 return;
57             }
58             for(register int i=0;i<G[now].size();++i){
59 //                cout<<G[now][i]<<endl;
60                 q.push(G[now][i]);
61             }
62         }
63         puts("Yes");
64     }
65 }
66 
67 using namespace Solve;
68 
69 int main(){
70 //    freopen(".in","r",stdin);
71 //    freopen(".out","w",stdout);
72     solve();
73 }

 

posted @ 2018-10-24 21:29  Ilverene  阅读(183)  评论(0编辑  收藏  举报