#include <iostream> #include <map> #include <set> #include <string> #include <deque> using namespace std; int T; string solve(int t); int main() { cin >> T; for(int i=0; i<T; i++) cout << solve(i) << endl; return 0; } string solve(int t) { int N; map<int, set<int>> spot; string B, E; set<string> visited; deque<string> q; cin >> N >> B >> E; for(int i=1; i<N; i++) { int a, b; cin >> a >> b; spot[a-1].insert(b-1); spot[b-1].insert(a-1); } q.push_back(B); visited.insert(B); while(!q.empty()) { string curNode = q.front(); q.pop_front(); if(curNode == E) return "TAK"; for(int u=0; u<N; u++) for(int v : spot[u]) { string nextNode = curNode; nextNode[v] = curNode[u]; if(visited.count(nextNode)) continue; q.push_back(nextNode); visited.insert(nextNode); } } return "NIE"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <iostream> #include <map> #include <set> #include <string> #include <deque> using namespace std; int T; string solve(int t); int main() { cin >> T; for(int i=0; i<T; i++) cout << solve(i) << endl; return 0; } string solve(int t) { int N; map<int, set<int>> spot; string B, E; set<string> visited; deque<string> q; cin >> N >> B >> E; for(int i=1; i<N; i++) { int a, b; cin >> a >> b; spot[a-1].insert(b-1); spot[b-1].insert(a-1); } q.push_back(B); visited.insert(B); while(!q.empty()) { string curNode = q.front(); q.pop_front(); if(curNode == E) return "TAK"; for(int u=0; u<N; u++) for(int v : spot[u]) { string nextNode = curNode; nextNode[v] = curNode[u]; if(visited.count(nextNode)) continue; q.push_back(nextNode); visited.insert(nextNode); } } return "NIE"; } |