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
| #include <bits/stdc++.h>
const int kMaxN = 6e5 + 5;
int n; int x[kMaxN], y[kMaxN], ans[kMaxN], cur[kMaxN]; bool vis[kMaxN], vx[kMaxN]; std::vector<std::pair<int, int>> G[kMaxN];
void dfs(int u) { vx[u] = 1; for (int i = cur[u]; i < (int)G[u].size(); i = cur[u]) { auto [v, id] = G[u][i]; cur[u] = i + 1; if (vis[id]) continue; vis[id] = 1; dfs(v); if (u >= 1 && u <= 2e5 && v > 2e5) ans[id] = 0; else if (v >= 1 && v <= 2e5 && u > 2e5) ans[id] = 1; else assert(!u || !v); } }
void dickdreamer() { std::cin >> n; for (int i = 1; i <= n; ++i) { std::cin >> x[i] >> y[i]; G[x[i]].emplace_back(y[i] + (int)2e5, i), G[y[i] + (int)2e5].emplace_back(x[i], i); } int tmp = n; for (int i = 1; i <= 4e5; ++i) if (G[i].size() & 1) G[0].emplace_back(i, ++tmp), G[i].emplace_back(0, tmp); for (int i = 0; i <= 4e5; ++i) dfs(i); for (int i = 1; i <= n; ++i) std::cout << (ans[i] ? 'r' : 'b'); }
int32_t main() { #ifdef ORZXKR freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0); int T = 1; while (T--) dickdreamer(); return 0; }
|