#include <algorithm>
#include <cstdio>
#include <vector>
#include <set>
#include <climits>
#include <string>
using namespace std;
long w1[100002];
long w2[100002];
bool foo()
{
long n;
scanf("%ld", &n);
string sa(n, ' ');
string sb(n, ' ');
scanf("%s", &sa[0]);
scanf("%s", &sb[0]);
if (n == 1)
return sa.compare(sb) == 0;
fill(w1, w1 + n + 1, 0);
fill(w2, w2 + n + 1, 0);
long a, b;
long i = 1;
for (; i < n; ++i)
{
scanf("%ld %ld", &a, &b);
if (w1[a] == 0)
w1[a] = b;
else
{
if (w2[a] == 0)
w2[a] = b;
else
break;
}
if (w2[b] == 0)
w2[b] = a;
else
{
if (w1[b] == 0)
w1[b] = a;
else
break;
}
}
if (i < n)
{
++i;
for (; i < n; ++i)
scanf("%ld %ld", &a, &b);
if (sa.find('0') == string::npos || sa.find('1') == string::npos)
return sa.compare(sb) == 0;
return true;
}
for (a = 1; a <= n; ++a)
if (w2[a] == 0 || w1[a] == 0)
break;
b = w1[a] + w2[a];
long ra = 0, rb = sa[a-1] != sb[a-1];
for (i = 1; i < n; ++i)
{
if (sa[a-1] != sa[b-1])
++ra;
if (sb[a-1] != sb[b-1])
++rb;
long t = a;
a = b;
b = w1[a] + w2[a] - t;
}
return ra >= rb;
}
int main()
{
long t;
scanf("%ld", &t);
//long x = 1;
while (t--)
{
//if (x++ == 20)
//printf("%s\n", foo() ? "TAK" : "NIE");
//else
printf("%s\n", foo() ? "TAK" : "NIE");
}
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 92 93 94 95 96 | #include <algorithm> #include <cstdio> #include <vector> #include <set> #include <climits> #include <string> using namespace std; long w1[100002]; long w2[100002]; bool foo() { long n; scanf("%ld", &n); string sa(n, ' '); string sb(n, ' '); scanf("%s", &sa[0]); scanf("%s", &sb[0]); if (n == 1) return sa.compare(sb) == 0; fill(w1, w1 + n + 1, 0); fill(w2, w2 + n + 1, 0); long a, b; long i = 1; for (; i < n; ++i) { scanf("%ld %ld", &a, &b); if (w1[a] == 0) w1[a] = b; else { if (w2[a] == 0) w2[a] = b; else break; } if (w2[b] == 0) w2[b] = a; else { if (w1[b] == 0) w1[b] = a; else break; } } if (i < n) { ++i; for (; i < n; ++i) scanf("%ld %ld", &a, &b); if (sa.find('0') == string::npos || sa.find('1') == string::npos) return sa.compare(sb) == 0; return true; } for (a = 1; a <= n; ++a) if (w2[a] == 0 || w1[a] == 0) break; b = w1[a] + w2[a]; long ra = 0, rb = sa[a-1] != sb[a-1]; for (i = 1; i < n; ++i) { if (sa[a-1] != sa[b-1]) ++ra; if (sb[a-1] != sb[b-1]) ++rb; long t = a; a = b; b = w1[a] + w2[a] - t; } return ra >= rb; } int main() { long t; scanf("%ld", &t); //long x = 1; while (t--) { //if (x++ == 20) //printf("%s\n", foo() ? "TAK" : "NIE"); //else printf("%s\n", foo() ? "TAK" : "NIE"); } return 0; } |
English