#include<bits/stdc++.h> using namespace std; void solve(){ int n,i,a,b,l,c1,c2,p; bool same; char c; scanf("%d",&n); bool a1[n]; bool a2[n]; vector <int> G[n]; for(i=0; i<n; i++){ scanf(" %c",&c); a1[i]=(c=='1'); } for(i=0;i<n;i++){ scanf(" %c",&c); a2[i]=(c=='1'); } for(i=0;i<n-1;i++){ scanf("%d%d",&a,&b); a--; b--; G[a].push_back(b); G[b].push_back(a); } same=true; for(i=0;i<n;i++) if(a1[i]!=a2[i]) same=false; if(same){ printf("TAK\n"); return; } if(n==1){ printf("NIE\n"); return; } l=0; for(i=0;i<n;i++) if(G[i].size()==1) l++; if(l>2){ same=true; for(i=0;i<n-1;i++) if(a1[i]!=a1[i+1]) same=false; if(same){ printf("NIE\n"); return; } for(i=0;i<n;i++) for(auto ai:G[i]) if(a2[i]==a2[ai]){ printf("TAK\n"); return; } printf("NIE\n"); } else{ l=0; while(G[l].size()!=1) l++; c1=c2=0; a=l; for(i=0;i<n-1;i++){ if(G[a].size()==1) b=G[a][0]; else if(G[a][0]!=p) b=G[a][0]; else b=G[a][1]; if(a1[a]!=a1[b]) c1++; if(a2[a]!=a2[b]) c2++; p=a; a=b; } if(c1>c2 || (c1==c2 && a1[l]==a2[l])) printf("TAK\n"); else printf("NIE\n"); } } int main(){ int t,i; scanf("%d",&t); for(i=0;i<t;i++) solve(); 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 | #include<bits/stdc++.h> using namespace std; void solve(){ int n,i,a,b,l,c1,c2,p; bool same; char c; scanf("%d",&n); bool a1[n]; bool a2[n]; vector <int> G[n]; for(i=0; i<n; i++){ scanf(" %c",&c); a1[i]=(c=='1'); } for(i=0;i<n;i++){ scanf(" %c",&c); a2[i]=(c=='1'); } for(i=0;i<n-1;i++){ scanf("%d%d",&a,&b); a--; b--; G[a].push_back(b); G[b].push_back(a); } same=true; for(i=0;i<n;i++) if(a1[i]!=a2[i]) same=false; if(same){ printf("TAK\n"); return; } if(n==1){ printf("NIE\n"); return; } l=0; for(i=0;i<n;i++) if(G[i].size()==1) l++; if(l>2){ same=true; for(i=0;i<n-1;i++) if(a1[i]!=a1[i+1]) same=false; if(same){ printf("NIE\n"); return; } for(i=0;i<n;i++) for(auto ai:G[i]) if(a2[i]==a2[ai]){ printf("TAK\n"); return; } printf("NIE\n"); } else{ l=0; while(G[l].size()!=1) l++; c1=c2=0; a=l; for(i=0;i<n-1;i++){ if(G[a].size()==1) b=G[a][0]; else if(G[a][0]!=p) b=G[a][0]; else b=G[a][1]; if(a1[a]!=a1[b]) c1++; if(a2[a]!=a2[b]) c2++; p=a; a=b; } if(c1>c2 || (c1==c2 && a1[l]==a2[l])) printf("TAK\n"); else printf("NIE\n"); } } int main(){ int t,i; scanf("%d",&t); for(i=0;i<t;i++) solve(); return 0; } |