先埋锅-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; }
有不懂欢迎咨询
QQ:1326487164(添加时记得备注)