#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define p_b push_back
#define m_p make_pair
#define fi first
#define se second
const int maxn = 100001;
ll mod = 1000000007;
string s1, s2;
vector<int> wym, gn[maxn];
//void dfs(int v, int pr, vector<bool> &t1, vector<bool> &t2){
// bool r = true;
// if(s1[v]=='0') r = false;
// t1.p_b(r);
// r = true;
// if(s2[v]=='0') r = false;
// t2.p_b(r);
// for(auto u: gn[v])
// if(u!=pr)
// dfs(v, -1, t1, t2);
//}
//
//bool solve(int v){
// vector<bool> t1, t2;
// dfs(v, -1, t1, t2);
// int r = 0;
// bool kol = t1[0];
// int n = (int)t1.size();
// int pr = -1;
// for(int i = 0; i<n; i++){
// if(i<=r && t2[i]!=kol){
// if(pr==)
// }
// }
//
//}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int z; cin>>z;
while(z--){
int n; cin>>n;
for(int i = 0; i<n; i++)
gn[i].clear();
cin>>s1>>s2;
bool s0_1 = true, s1_1 = true, s0_2 = true, s1_2 = true;
for(auto i: s1){
if(i=='1') s0_1 = false;
else s1_1 = false;
}
for(auto i: s2){
if(i=='1') s0_2 = false;
else s1_2 = false;
}
for(int i = 1; i<n; i++){
int a, b; cin>>a>>b;
a--; b--;
gn[a].p_b(b);
gn[b].p_b(a);
}
if(s1==s2){
cout<<"TAK\n";
continue;
}
if((s0_1 && !s0_2) || (s1_1 && !s1_1)){
cout<<"NIE\n";
continue;
}
bool zn = false;
for(int i = 0; i<n; i++)
if((int)gn[i].size()>=3){
zn = true;
break;
}
if(zn){
cout<<"TAK\n";
continue;
}
wym.resize(n);
for(int i = 0; i<n; i++)
wym[i] = -1;
int kt;
for(int i = 0; i<n; i++)
if((int)gn[i].size()==1){
//if(solve(i))cout<<"TAK\n";
//else
cout<<"NIE\n";
break;
}
}
}
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 104 105 106 107 108 | #include <bits/stdc++.h> using namespace std; #define ll long long #define p_b push_back #define m_p make_pair #define fi first #define se second const int maxn = 100001; ll mod = 1000000007; string s1, s2; vector<int> wym, gn[maxn]; //void dfs(int v, int pr, vector<bool> &t1, vector<bool> &t2){ // bool r = true; // if(s1[v]=='0') r = false; // t1.p_b(r); // r = true; // if(s2[v]=='0') r = false; // t2.p_b(r); // for(auto u: gn[v]) // if(u!=pr) // dfs(v, -1, t1, t2); //} // //bool solve(int v){ // vector<bool> t1, t2; // dfs(v, -1, t1, t2); // int r = 0; // bool kol = t1[0]; // int n = (int)t1.size(); // int pr = -1; // for(int i = 0; i<n; i++){ // if(i<=r && t2[i]!=kol){ // if(pr==) // } // } // //} int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int z; cin>>z; while(z--){ int n; cin>>n; for(int i = 0; i<n; i++) gn[i].clear(); cin>>s1>>s2; bool s0_1 = true, s1_1 = true, s0_2 = true, s1_2 = true; for(auto i: s1){ if(i=='1') s0_1 = false; else s1_1 = false; } for(auto i: s2){ if(i=='1') s0_2 = false; else s1_2 = false; } for(int i = 1; i<n; i++){ int a, b; cin>>a>>b; a--; b--; gn[a].p_b(b); gn[b].p_b(a); } if(s1==s2){ cout<<"TAK\n"; continue; } if((s0_1 && !s0_2) || (s1_1 && !s1_1)){ cout<<"NIE\n"; continue; } bool zn = false; for(int i = 0; i<n; i++) if((int)gn[i].size()>=3){ zn = true; break; } if(zn){ cout<<"TAK\n"; continue; } wym.resize(n); for(int i = 0; i<n; i++) wym[i] = -1; int kt; for(int i = 0; i<n; i++) if((int)gn[i].size()==1){ //if(solve(i))cout<<"TAK\n"; //else cout<<"NIE\n"; break; } } } |
English