• codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D. Valid BFS


    把每个节点附加一个权值,表示节点在输出序列的位置,每一维vec都按照这个权值来排序,或者用优先队列,map,都可以

    #include<bits/stdc++.h>
    using namespace std;
    struct node{
        int num;
        int index;
    }no[200010];
    int x[200010],y[200010];
    vector<node> vec[200010];
    vector<int> ans;
    vector<int> in;
    queue<node> que;
    bool vis[200010];
    bool cmp(node A,node B)
    {
        return A.index<B.index;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
           no[i].num=i;
        for(int i=1;i<=n-1;i++)
        {
            scanf("%d%d",&x[i],&y[i]);
        }
        for(int i=1;i<=n;i++)
        {
            int tmp;
            scanf("%d",&tmp);
            in.push_back(tmp);
            no[tmp].index=i;
        }
        for(int i=1;i<=n-1;i++)
        {
            int xx=x[i],yy=y[i];
            vec[xx].push_back(no[yy]);
            vec[yy].push_back(no[xx]);
        }
        for(int i=1;i<=n;i++)//对邻接表的每一维排序,或者用优先队列也可以 
        {
            sort(vec[i].begin(),vec[i].end(),cmp);
        }
        /*for(int i=1;i<=n;i++)
        {
            for(int j=0;j<vec[i].size();j++)
            {
                printf("%d ",vec[i][j].num);
            }
            printf("
    ");
        }*/
        que.push(no[1]);
        ans.push_back(1);
        vis[1]=true;
        while(!que.empty())
        {
            node now=que.front();
            que.pop();
            int x=now.num;
            for(int i=0;i<vec[x].size();i++)
            {
                node to=vec[x][i];
                int y=to.num;
                if(vis[y])
                  continue;
                vis[y]=true;
                ans.push_back(y);
                que.push(to);
            }
        }
        for(int i=0;i<ans.size();i++)
        {
            if(ans[i]!=in[i])
            {
                printf("No
    ");
                return 0;
            }
        }
        printf("Yes
    ");
    }
  • 相关阅读:
    snmp
    iOS 精确定时器
    iOS 用命令实现简单的打包过程
    OpenSSH
    IOS 逆向工程之砸壳
    UNIX相关知识
    BSD历史
    linux grep命令
    为什么国外程序员爱用Mac?
    iOS xcuserdata
  • 原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10252005.html
Copyright © 2020-2023  润新知