| 比赛 |
csp2025模拟练习1 |
评测结果 |
AAWWWAWWWWWWWWWWAWAWWWWWWWWWWWWWWWWWAWWWWWWWWWWWWW |
| 题目名称 |
彩色道路 |
最终得分 |
12 |
| 用户昵称 |
wdsjl |
运行时间 |
8.462 s |
| 代码语言 |
C++ |
内存使用 |
14.19 MiB |
| 提交时间 |
2025-10-28 10:28:47 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int N, M;
int main() {
freopen("paintoads.in", "r", stdin);
freopen("paintoads.out", "w", stdout);
cin >> N >> M;
vector<pair<int, int>> edges(M);
vector<vector<pair<int, int>>> adj(N + 1);
for (int i = 0; i < M; ++i) {
int u, v;
cin >> u >> v;
edges[i] = {u, v};
adj[u].emplace_back(v, i);
adj[v].emplace_back(u, i);
}
for (int u = 1; u <= N; ++u) {
sort(adj[u].begin(), adj[u].end(), [](const pair<int, int>& a, const pair<int, int>& b) {
return a.second < b.second;
});
}
vector<bool> i_t(M, false);
vector<int> p(N + 1, -1);
vector<int> cl(N + 1, -1);
vector<bool> vis(N + 1, false);
for (int u = 1; u <= N; ++u) {
if (!vis[u]) {
stack<pair<int, int>> st;
st.emplace(u, 0);
vis[u] = true;
cl[u] = 0;
while (!st.empty()) {
auto [cur, idx] = st.top();
st.pop();
bool found = false;
for (int i = idx; i < adj[cur].size(); ++i) {
auto [v, e_idx] = adj[cur][i];
if (!vis[v]) {
vis[v] = true;
p[v] = cur;
cl[v] = 1 - cl[cur];
i_t[e_idx] = true;
st.emplace(cur, i + 1);
st.emplace(v, 0);
found = true;
break;
}
}
}
}
}
string res;
for (int i = 0; i < M; ++i) {
if (i_t[i]) {
int u = edges[i].first;
int v = edges[i].second;
if (cl[u] == 0 && cl[v] == 1) {
res.push_back('B');
} else {
res.push_back('R');
}
} else {
res.push_back('G');
}
}
cout << res << endl;
return 0;
}