• 题解 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 }
  • 相关阅读:
    一个bug肝一周...忍不住提了issue
    git上传本地项目
    simsun.ttc is not a valid ttf file(linux OS/windows OS)
    mysql端口
    基于Docker的WebApi接口服务
    基于Docker的WebApi接口服务
    服务容器化Docker部署访问
    Docker部署vue项目
    C#限制字符串的长度
    python多进程
  • 原文地址:https://www.cnblogs.com/ilverene/p/9846277.html
Copyright © 2020-2023  润新知