先埋锅-CF-Valid BFS?-差一点没交上

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 1e9+7
using namespace std;
const int MAXN = 2000000;
const int MAXM = 2000000;
int n,m;
int s[MAXN];
struct EDGE
{
    int v,next,w;
}edge[MAXN];
int head[MAXN],e;
int q[MAXN],vis[MAXN],d[MAXN];
void init()
{
    e=0;
    memset(head,-1,sizeof(head));
}
void add(int u,int v)//链式前向星部分
{
    edge[e].v=v;
    edge[e].next=head[u];//下一条边
    head[u]=e++;//u为节点边的头节点
}
void bfs(int src)
{
    for(int i=1;i<=n;i++)vis[i]=0;
    int h=0,t=0;
    vis[src]=1;
        int u=q[h++];
        for (int i=head[u];i!=-1;i=edge[i].next)
        {
            int v = edge[i].v;
            int w = edge[i].w;
            s[v]=s[u]++;
                if (!vis[v])
                {
                    vis[v]=1;
                }
       }
}
int main(){
  int n;
  int x,y;
  while(~scanf("%d",&n)){
    memset(s,0,sizeof(s));
    for (int i=1;i<=n;i++){
        scanf("%d%d",&x,&y);
        add(x,y);
    }
    bfs(1);
    s[1]=1;
    int ss=0;
    int flag=0;
    for (int i=1;1<=n;i++){
        scanf("%d",&ss);
        if (s[ss]!=i){flag=1;
        break;
        }
    }
     if (flag==0){
        printf("Yes\n");
     }else{
        printf("No\n");
     }
  }
  return 0;
}

 

posted @ 2018-09-03 00:40  bluefly-hrbust  阅读(171)  评论(0编辑  收藏  举报