题目描述
1-n,共n个数字,初始时每个数都是独立的算作1个串,之后会进行n-1次合并,每次合并操作,会把一个串放到另一个串的后面。
合并时会给出2个数字,x y,表示将以y为开头的串放到x为开头的串的后面。例如:
1 3 (3放到1后面,=> (1 3), 2, 4 )
2 4 (4放到2后面,=> (1 3), (2 4))
1 2 (2放到1后面,=> (1 3 2 4))
在n - 1次合并后,按顺序输出最终剩下的这个串的全部数字。
输入格式
第1行:1个数n(2 <= n <= 10000) 后面n - 1行,每行2个数x y,对应n - 1次合并操作,把以y为开头的串放到以x为开头的串的末尾。
输出格式
输出共n行,每行1个数,对应最终串包含的n个数字。
样例
输入样例
4
1 3
2 4
1 2
输出样例
1
3
2
4
题解:
#include <bits/stdc++.h>
using namespace std;
struct node {
int next, tail;
} nodes[10010];
bool isnext[10010];
int n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
nodes[i].tail = i;
}
for (int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
nodes[nodes[a].tail].next = b;
nodes[a].tail = nodes[b].tail;
isnext[b] = true;
}
int head = 0;
for (int i = 1; i <= n; i++) {
if (!isnext[i]) {
head = i;
}
}
for (int p = head; p != 0; p = nodes[p].next) {
cout << p << endl;
}
return 0;
}