Submission #1356124

#TimeUsernameProblemLanguageResultExecution timeMemory
1356124coin_Shops (NOI24_shops)C++20
0 / 100
394 ms98828 KiB
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define fi first
#define se second
#define pb push_back
using namespace std;

vector<vector<pair<int, int>>> adj_t; 
vector<vector<int>> adj;
vector<int> vis;

void col(int u, int c){
    if (vis[u] != 0) return;
    vis[u] = c;
    for (int v: adj[u]){
        if (vis[v] != 0) continue;
        col(v, 3 - c);
    }
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t = 1;
    // cin >> t;
    while(t--){
        // code goes here
        int n, m;
        cin >> n >> m;
        map<pair<int, int>, int> mp;
        adj.assign(n+5, vector<int>());
        adj_t.assign(n+5, vector<pair<int, int>>());
        vis.assign(n+5, 0);
        for (int i = 0; i < m; i++){
            int u1, v1, c;
            cin >> u1 >> v1 >> c;
            int u = min(u1, v1);
            int v = max(u1, v1);
            if (mp.find({u, v}) == mp.end()){
                mp[{u, v}] = c;
            }
            else{
                mp[{u, v}] = min(c, mp[{u, v}]);
            }
        }
        for (auto pa: mp){
            pair<int, int> p = pa.fi;
            int c = pa.se;
            adj_t[p.fi].push_back({c, p.se});
            adj_t[p.se].push_back({c, p.fi});
        }
        int ans = 0;
        for (int i = 1; i <= n; i++){
            sort(adj_t[i].begin(), adj_t[i].end());
            // take shortest edge
            ans = max(ans, adj_t[i][0].fi);
        }
        for (auto pa: mp){
            pair<int, int> p = pa.fi;
            int c = pa.se;
            if (c > ans) continue;
            adj[p.fi].push_back(p.se);
            adj[p.se].push_back(p.fi);
        }
        // anyhow color
        for (int i = 1; i <= n; i++){
            if (vis[i] == 0){
                col(i, 1);
            }
        }
        cout << ans << endl;
        for (int i = 1; i <= n; i++){
            cout << (vis[i] == 1 ? 'B' : 'D');
        }
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...