题意:
一个队列 每个人记录了自己前面和后面的人 求队列顺序
思路:
明显站在奇数位置上的人记录了前后两个偶数位置的人 站在偶数位置上的人同样
所以对于偶数位置 只要从0往后找就可以了
对于奇数位置 只要先找到第一个人 然后往后找就可以了
代码:
#include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<map> #include<set> #include<vector> #include<queue> #include<cstdlib> #include<ctime> #include<cmath> using namespace std; typedef long long LL; #define N 1000010 int a[N], b[N], ans[N], vis[N], tmp[N]; int n; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { int fr, ba; scanf("%d%d", &fr, &ba); a[fr] = ba; b[ba] = fr; vis[fr] = vis[ba] = 1; } int k = 2; for (int i = a[0]; i; i = a[i], k += 2) { ans[k] = i; vis[i] = 0; } for (k = 1;; k++) { if (vis[k]) break; } while (b[k]) { k = b[k]; } int fzc = k; k = 1; for (int i = fzc; i; i = a[i], k += 2) { ans[k] = i; } for (int i = 1; i <= n; i++) printf("%d%s", ans[i], (i == n) ? "\n" : " "); return 0; }
时间: 2024-10-18 17:20:07