Submission #887640

#TimeUsernameProblemLanguageResultExecution timeMemory
887640TAhmed33Jail (JOI22_jail)C++98
5 / 100
593 ms1048576 KiB
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector <int> adj[251];
vector <int> g, e, f;
bool dfs (int pos, int par, int c) {
	if (pos == c) {
		g.push_back(pos);
		return 1;
	}
	bool f2 = 0;
	for (auto j : adj[pos]) {
		if (j == par) continue;
		f2 |= dfs(j, pos, c);
	}
	if (f2) g.push_back(pos);
	return f2;
}
int dp[251][251];
int ans (int p1, int p2) {
	int &ret = dp[p1][p2];
	if (ret != -1) return ret;
	if (p1 == (int)e.size() - 1 && p2 == (int)f.size() - 1) return ret = 1;
	ret = 0;
	if (p1 != (int)e.size() - 1 && e[p1 + 1] != f[p2]) ret |= ans(p1 + 1, p2);
	if (p2 != (int)f.size() - 1 && e[p1] != f[p2 + 1]) ret |= ans(p1, p2 + 1);
	return ret;
}
int main () {
	int t = 1;
	cin >> t;
	while (t--) {
		cin >> n;
		for (int i = 1; i <= n; i++) adj[i].clear();
		for (int i = 1; i < n; i++) {
			int a, b;
			cin >> a >> b;
			adj[a].push_back(b);
			adj[b].push_back(a);
		}
		cin >> m;
		int x, y;
		cin >> x >> y;
		dfs(x, -1, y);
		f = g;
		g.clear();
		cin >> x >> y;
		dfs(x, -1, y);
		e = g;
		g.clear();
		memset(dp, -1, sizeof(dp));
		cout << (ans(0, 0) ? "Yes\n" : "No\n");
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...