#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; } } } |