玄关求调
  • 板块灌水区
  • 楼主lucy2012
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/7/30 15:53
  • 上次更新2024/7/30 16:39:04
查看原帖
玄关求调
1252442
lucy2012楼主2024/7/30 15:53

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[200010],vis[200010],dep[200010],cnt=1,maxx;
vector<int> tree[200010],depp[200010];
void dfs(int x,int y){
	if(y>maxx)
	    maxx=y;
	dep[y]++;
	depp[y].push_back(x);
	for(int i=0;i<tree[x].size();i++){
		if(!vis[tree[x][i]]){
			vis[tree[x][i]]=1;
			dfs(tree[x][i],y+1);
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		tree[x].push_back(y);
		tree[y].push_back(x);
	}
	for(int i=1;i<=n;i++)
	    cin>>a[i];
	dfs(1,1);
	int sum=0;
	for(int i=1;i<=maxx;i++){
		sum+=dep[i-1];
		for(int j=sum+1;j<=sum+dep[i];j++){
			int tmp=0;
			for(int k=0;k<depp[i].size();k++){
				if(a[j]==depp[i][k]){
					tmp=1;
					break;
				}
			}
			if(!tmp){
			    cout<<"No";
			    return 0;
		    }
		}
	}
    cout<<"Yes";
	return 0;
}
2024/7/30 15:53
加载中...