1. 程式人生 > >【codeforces 1037D】【驗證bfs序】【思維】

【codeforces 1037D】【驗證bfs序】【思維】

【連結】

【題意】

給你一棵樹以及一個bfs序,問是否存在這個bfs序

【思路】

從給定的bfs序入手考慮

【程式碼】

#include<bits./stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e6 + 5;
vector<int>v[maxn];
int a[maxn];
map<int, bool>mp[maxn];
int n;

int bfs(void) {
	int cnt = 1;
	queue<int>q;
	if (a[cnt] != 1)return 0;
	q.push(a[cnt]);
	cnt++;
	while (q.size()) {
		int u = q.front(); q.pop();
		int v = a[cnt];
		while (mp[u][v]) {
			q.push(v);
			cnt++;
			v = a[cnt];
		}
	}
	return cnt == (n + 1);
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i < n; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		mp[x][y] = mp[y][x] = 1;
	}
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
	}
	if (bfs()) {
		printf("Yes\n");
	}
	else {
		printf("No\n");
	}
}