4. League of Leesins
阿新 • • 發佈:2022-03-24
題目連結:League of Leesins
容易注意到只出現一次的數必然可以作為第一個元素,然後從這個三元組開始搜下去就可以得到答案。具體實現方式很多,這裡就不寫了。
其實這題還有一個比較有趣的做法,可以根據給出的三元組對數字連邊,最後進行一次拓撲排序即可。
#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 5; int deg[maxn], vis[maxn]; int n; vector<int> g[maxn]; void add(int u, int v) { g[u].push_back(v); g[v].push_back(u); } void work(int h) { queue<int> Q; Q.push(h); vis[h] = 1; while (!Q.empty()) { int u = Q.front(); Q.pop(); cout << u << " "; for (int v : g[u]) { if (vis[v] == 0) { deg[v]--; if (deg[v] == 1) { Q.push(v); vis[v] = 1; } } } } } int main() { cin >> n; for (int i = 0, x, y, z; i < n - 2; i++) { cin >> x >> y >> z; add(x, y), add(x, z), add(y, z); deg[x]++, deg[y]++, deg[z]++; } int a = 0, b = 0; for (int i = 1; i <= n; i++) { if (deg[i] == 1) { if (a == 0) a = i; else deg[i] += 2; } } for (int i : g[a]) { if (deg[i] == 2) b = i; } for (int i = 1; i <= n; i++) { if (deg[i] == 2 && i != b) deg[i]++; } work(a); return 0; }