#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
constexpr int M = 1e5+7;
string s1, s2;
vector<int>g[M];
string xd, xd2;
void nie(){
cout << "NIE\n";
}
void tak(){
cout << "TAK\n";
}
void dfs(int v, int p){
if(s1[v-1] != s1[p-1]) xd += s1[v-1];
if(s2[v-1] != s2[p-1]) xd2 += s2[v-1];
for(auto w:g[v]){
if(w == p) continue;
dfs(w, v);
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
bool sc;
int t, n, a, b, v, i0, i1, j0, j1;
cin >> t;
while(t--){
cin >> n;
cin >> s1 >> s2;
s1 += '4';
s2 += '4';
i0 = i1 = j0 = j1 = 0;
for(int i=0; i<n; i++){
if(s1[i] == '0') i0++;
else i1++;
if(s2[i] == '0') j0++;
else j1++;
}
for(int i=1; i<n; i++){
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
if(s1 == s2){
tak();
goto A;
}
if((j0 && !i0) || (j1 && !i1)){
nie();
goto A;
}
sc = 1;
for(int i=1; i<=n; i++) if(g[i].size() > 2) sc = 0;
if(sc){
for(int i=1; i<=n; i++) if(g[i].size() == 1) v = i;
dfs(v, n+1);
if(xd.size() < xd2.size()) nie();
else if(xd.size() > xd2.size()) tak();
else if(xd.size() == xd2.size() && xd == xd2) tak();
else nie();
}
else{
for(int i=1; i<=n; i++){
for(auto w:g[i]){
if(s2[i-1] == s2[w-1]){
tak();
goto A;
}
}
}
nie();
}
A:;
s1.clear();
s2.clear();
xd.clear();
xd2.clear();
for(int i=1; i<=n; i++) g[i].clear();
}
return 0;
}
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; constexpr int M = 1e5+7; string s1, s2; vector<int>g[M]; string xd, xd2; void nie(){ cout << "NIE\n"; } void tak(){ cout << "TAK\n"; } void dfs(int v, int p){ if(s1[v-1] != s1[p-1]) xd += s1[v-1]; if(s2[v-1] != s2[p-1]) xd2 += s2[v-1]; for(auto w:g[v]){ if(w == p) continue; dfs(w, v); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); bool sc; int t, n, a, b, v, i0, i1, j0, j1; cin >> t; while(t--){ cin >> n; cin >> s1 >> s2; s1 += '4'; s2 += '4'; i0 = i1 = j0 = j1 = 0; for(int i=0; i<n; i++){ if(s1[i] == '0') i0++; else i1++; if(s2[i] == '0') j0++; else j1++; } for(int i=1; i<n; i++){ cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } if(s1 == s2){ tak(); goto A; } if((j0 && !i0) || (j1 && !i1)){ nie(); goto A; } sc = 1; for(int i=1; i<=n; i++) if(g[i].size() > 2) sc = 0; if(sc){ for(int i=1; i<=n; i++) if(g[i].size() == 1) v = i; dfs(v, n+1); if(xd.size() < xd2.size()) nie(); else if(xd.size() > xd2.size()) tak(); else if(xd.size() == xd2.size() && xd == xd2) tak(); else nie(); } else{ for(int i=1; i<=n; i++){ for(auto w:g[i]){ if(s2[i-1] == s2[w-1]){ tak(); goto A; } } } nie(); } A:; s1.clear(); s2.clear(); xd.clear(); xd2.clear(); for(int i=1; i<=n; i++) g[i].clear(); } return 0; } |
English