题目
![image-20210525194312850](https://i-blog.csdnimg.cn/blog_migrate/096151c67018403b989ca7d4fb2e5aac.png)
![image-20210525194337404](https://i-blog.csdnimg.cn/blog_migrate/0682c683d4b050418cb591700839ab2c.png)
![image-20210525194351147](https://i-blog.csdnimg.cn/blog_migrate/08fa43fcb7cdd23dcc0786d52c6c251b.png)
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 15, M = 2 * N;
int n;
int h[N], e[M], ne[M], idx, ed[N];
bool st[N];
char mmp[N];
string tr[2];
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
void mswap(int u) {
int left = -1, right = -1;
left = h[u];
if (left == -1) return;
right = ne[h[u]];
if (right == -1) return;
if (e[left] > e[right]) {
h[u] = right;
ne[right] = left;
ne[left] = -1;
}
}
void dfs(int u, string &tr) {
st[u] = true;
mswap(u);
tr += mmp[u];
for (int i = h[u]; i != -1; i = ne[i]) {
int v = e[i];
if (st[v]) continue;
dfs(v, tr);
}
}
int main() {
for (int k = 0; k < 2; k++) {
memset(h, -1, sizeof h);
memset(e, 0, sizeof e);
memset(ne, 0, sizeof ne);
idx = 0;
memset(ed, 0, sizeof ed);
memset(st, 0, sizeof st);
memset(mmp, 0, sizeof mmp);
cin >> n;
for (int i = 0; i < n; i++) {
char ch, a, b;
cin >> ch >> a >> b;
mmp[i] = ch;
if (b != '-') add(i, b - '0'), ed[b - '0']++;
if (a != '-') add(i, a - '0'), ed[a - '0']++;
}
int root = 0;
for (int i = 0; i < n; i++)
if (ed[i] == 0) {
root = i;
break;
}
dfs(root, tr[k]);
}
if (tr[0] == tr[1]) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}