#include <bits/stdc++.h>
using namespace std;
void print(const vector<bool>& v)
{
for(int i=0; i<v.size(); ++i)
cout << v[i];
cout << endl;
}
void go()
{
int n; cin >> n;
string s; cin >> s;
vector<bool> b_start(n);
for(int i=0; i<n; ++i) b_start[i] = (s[i]=='1'?1:0);
//print(b_start);
cin >> s;
vector<bool> b_stop(n);
for(int i=0; i<n; ++i) b_stop[i] = (s[i]=='1'?1:0);
//print(b_stop);
vector<vector<int>> v(n);
for(int i=0; i<n-1; ++i)
{
int x, y;
cin >> x >> y;
v[x-1].push_back(y-1);
v[y-1].push_back(x-1);
//cout << x << " - " << y << endl;
}
// for(int i=0; i<v.size(); ++i)
// {
// cout << i << ": ";
// for(int j=0; j<v[i].size(); ++j)
// {
// cout << v[i][j] << " ";
// }
// cout << endl;
// }
if(b_start==b_stop) { cout << "TAK\n"; return; }
set<vector<bool>> visited;
visited.insert(b_start);
queue<vector<bool>> frontier;
frontier.push(b_start);
while(!frontier.empty())
{
vector<bool> x = frontier.front();
frontier.pop();
for(int i=0; i<n; ++i)
for(int j=0; j<v[i].size(); ++j)
if(x[i]!=x[v[i][j]])
{
x[i] = not x[i];
if(visited.count(x)==0)
{
if(x==b_stop) { cout << "TAK\n"; return; }
visited.insert(x);
frontier.push(x);
}
x[i] = not x[i];
}
}
cout << "NIE\n";
}
int main()
{
int t; cin >> t;
while(t--) go();
cout << flush;
}
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 | #include <bits/stdc++.h> using namespace std; void print(const vector<bool>& v) { for(int i=0; i<v.size(); ++i) cout << v[i]; cout << endl; } void go() { int n; cin >> n; string s; cin >> s; vector<bool> b_start(n); for(int i=0; i<n; ++i) b_start[i] = (s[i]=='1'?1:0); //print(b_start); cin >> s; vector<bool> b_stop(n); for(int i=0; i<n; ++i) b_stop[i] = (s[i]=='1'?1:0); //print(b_stop); vector<vector<int>> v(n); for(int i=0; i<n-1; ++i) { int x, y; cin >> x >> y; v[x-1].push_back(y-1); v[y-1].push_back(x-1); //cout << x << " - " << y << endl; } // for(int i=0; i<v.size(); ++i) // { // cout << i << ": "; // for(int j=0; j<v[i].size(); ++j) // { // cout << v[i][j] << " "; // } // cout << endl; // } if(b_start==b_stop) { cout << "TAK\n"; return; } set<vector<bool>> visited; visited.insert(b_start); queue<vector<bool>> frontier; frontier.push(b_start); while(!frontier.empty()) { vector<bool> x = frontier.front(); frontier.pop(); for(int i=0; i<n; ++i) for(int j=0; j<v[i].size(); ++j) if(x[i]!=x[v[i][j]]) { x[i] = not x[i]; if(visited.count(x)==0) { if(x==b_stop) { cout << "TAK\n"; return; } visited.insert(x); frontier.push(x); } x[i] = not x[i]; } } cout << "NIE\n"; } int main() { int t; cin >> t; while(t--) go(); cout << flush; } |
English