#include <cstdio>
#include <cstring>
#include <map>
#define cont(s) {puts (s); continue;}
int main ()
{
int t;
scanf ("%i", &t);
while (t--)
{
int n;
scanf ("%i", &n);
char u[n+1], v[n+1];
scanf (" %s %s", u, v);
std::multimap <int, int> E;
for (int i=0; i<n-1; i++)
{
int a, b;
scanf ("%i%i", &a, &b);
E.emplace (a-1, b-1);
E.emplace (b-1, a-1);
}
if (!strcmp (u, v)) cont ("TAK");
int c = !!strchr (u, '0') + !!strchr (u, '1');
int d = !!strchr (v, '0') + !!strchr (v, '1');
if (c<d) cont ("NIE");
if (c==1) cont (*u==*v? "TAK": "NIE");
d = 0;
for (auto e: E) if (v[e.first]==v[e.second]) d = 1;
if (!d) cont ("NIE");
int s = -1, p = -1;
for (auto e: E)
{
if (p==e.first) continue;
else p = e.first;
int q = E.count (e.first);
if (q==1) s = p;
if (q>2)
{
s = -1;
break;
}
}
if (s==-1) cont ("TAK");
p = s;
c = 0, d = 0;
while (1)
{
auto r = E.equal_range (s);
auto i = r.first;
for (; i!=r.second; i++) if (i->second!=p) break;
if (u[s]!=u[p]) c++;
if (v[s]!=v[p]) d++;
if (i==r.second) break;
p = s;
s = i->second;
}
if (c<d) cont ("NIE");
if (c>d) cont ("TAK");
if (u[s]!=v[s]) cont ("NIE");
cont ("TAK");
}
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 | #include <cstdio> #include <cstring> #include <map> #define cont(s) {puts (s); continue;} int main () { int t; scanf ("%i", &t); while (t--) { int n; scanf ("%i", &n); char u[n+1], v[n+1]; scanf (" %s %s", u, v); std::multimap <int, int> E; for (int i=0; i<n-1; i++) { int a, b; scanf ("%i%i", &a, &b); E.emplace (a-1, b-1); E.emplace (b-1, a-1); } if (!strcmp (u, v)) cont ("TAK"); int c = !!strchr (u, '0') + !!strchr (u, '1'); int d = !!strchr (v, '0') + !!strchr (v, '1'); if (c<d) cont ("NIE"); if (c==1) cont (*u==*v? "TAK": "NIE"); d = 0; for (auto e: E) if (v[e.first]==v[e.second]) d = 1; if (!d) cont ("NIE"); int s = -1, p = -1; for (auto e: E) { if (p==e.first) continue; else p = e.first; int q = E.count (e.first); if (q==1) s = p; if (q>2) { s = -1; break; } } if (s==-1) cont ("TAK"); p = s; c = 0, d = 0; while (1) { auto r = E.equal_range (s); auto i = r.first; for (; i!=r.second; i++) if (i->second!=p) break; if (u[s]!=u[p]) c++; if (v[s]!=v[p]) d++; if (i==r.second) break; p = s; s = i->second; } if (c<d) cont ("NIE"); if (c>d) cont ("TAK"); if (u[s]!=v[s]) cont ("NIE"); cont ("TAK"); } return 0; } |
English