#include<bits/stdc++.h> using namespace std; #define pb push_back const int N = 100007; string s1, s2; vector<int> G[N]; int bylo[N]; int ile1=0, ile2=0; void dfs(int v) { bylo[v]=1; for(int u : G[v]) { if(!bylo[u]) { if(s1[v-1]!=s1[u-1]) ile1++; if(s2[v-1]!=s2[u-1]) ile2++; dfs(u); } } bylo[v]=0; } void clear(int n) { ile1=0; ile2=0; for(int i=1; i<=n; i++) G[i].clear(); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int t; cin>>t; while(t--) { int n, p, a, b; bool sciezka=1, czer=0, czar=0, dwu=1; cin>>n>>s1>>s2; clear(n); for(int i=1; i<n; i++) { cin>>a>>b; G[a].pb(b); G[b].pb(a); } if(s1==s2) { cout<<"TAK\n"; continue; } for(int i=1; i<=n; i++) { if(G[i].size()==1) p=i; if(G[i].size()>=3) sciezka=0; if(s1[i-1]=='1') czer=1; else czar=1; for(int u : G[i]) if(s2[i-1]==s2[u-1]) dwu=0; } if(!czar || !czer || dwu) { cout<<"NIE\n"; continue; } if(!sciezka) { cout<<"TAK\n"; continue; } dfs(p); if(s1[p-1]!=s2[p-1]) ile1--; if(ile1>=ile2) cout<<"TAK\n"; else cout<<"NIE\n"; } }
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 | #include<bits/stdc++.h> using namespace std; #define pb push_back const int N = 100007; string s1, s2; vector<int> G[N]; int bylo[N]; int ile1=0, ile2=0; void dfs(int v) { bylo[v]=1; for(int u : G[v]) { if(!bylo[u]) { if(s1[v-1]!=s1[u-1]) ile1++; if(s2[v-1]!=s2[u-1]) ile2++; dfs(u); } } bylo[v]=0; } void clear(int n) { ile1=0; ile2=0; for(int i=1; i<=n; i++) G[i].clear(); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int t; cin>>t; while(t--) { int n, p, a, b; bool sciezka=1, czer=0, czar=0, dwu=1; cin>>n>>s1>>s2; clear(n); for(int i=1; i<n; i++) { cin>>a>>b; G[a].pb(b); G[b].pb(a); } if(s1==s2) { cout<<"TAK\n"; continue; } for(int i=1; i<=n; i++) { if(G[i].size()==1) p=i; if(G[i].size()>=3) sciezka=0; if(s1[i-1]=='1') czer=1; else czar=1; for(int u : G[i]) if(s2[i-1]==s2[u-1]) dwu=0; } if(!czar || !czer || dwu) { cout<<"NIE\n"; continue; } if(!sciezka) { cout<<"TAK\n"; continue; } dfs(p); if(s1[p-1]!=s2[p-1]) ile1--; if(ile1>=ile2) cout<<"TAK\n"; else cout<<"NIE\n"; } } |