比赛 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;
}