1938 2022. 12. 12 11:55:49 TomaSajt Üzletlánc cpp17 Accepted 40/40 41ms 10392 KiB
#include <bits/stdc++.h>
#define speed ios::sync_with_stdio(0);cin.tie(0)
using namespace std;

int n;
void calcDist(const vector<vector<int>>& g, vector<int>& dist, int s) {
    queue<int> q;
    q.push(s);
    dist.assign(n + 1, -1);
    dist[s] = 0;
    while (!q.empty()) {
        int curr = q.front(); q.pop();
        for (int nei : g[curr]) {
            if (dist[nei] != -1) continue;
            dist[nei] = dist[curr] + 1;
            q.push(nei);
        }
    }
}
int main() {
    speed;
    int m, a, b;
    cin >> n >> m >> a >> b;
    vector<vector<int>> g(n + 1);
    vector<bool> vis(n + 1);
    while (m--) {
        int u, v; cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector<int> dista, distb;
    calcDist(g, dista, a);
    calcDist(g, distb, b);
    vector<pair<int, int>> indCombo(n);
    for (int i = 1; i <= n; i++) {
        indCombo[i - 1] = { dista[i] - distb[i],i };
    }
    sort(indCombo.begin(), indCombo.end());
    vector<int> isA(n + 1);
    for (int j = 0; j < n; j++) {
        auto [d, i] = indCombo[j];
        isA[i] = j < n / 2;
    }
    int res = 0;
    for (int i = 1; i <= n; i++) res += isA[i] ? dista[i] : distb[i];
    cout << res << '\n';
    for (int i = 1; i <= n; i++) cout << "BA"[isA[i]];
}
Subtask Sum Test Verdict Time Memory
base 40/40
1 Accepted 0/0 3ms 1824 KiB
2 Accepted 0/0 2ms 2068 KiB
3 Accepted 2/2 2ms 2096 KiB
4 Accepted 2/2 2ms 2324 KiB
5 Accepted 3/3 2ms 2556 KiB
6 Accepted 3/3 2ms 2732 KiB
7 Accepted 2/2 2ms 2932 KiB
8 Accepted 2/2 2ms 3048 KiB
9 Accepted 3/3 2ms 3128 KiB
10 Accepted 3/3 2ms 3120 KiB
11 Accepted 2/2 4ms 4028 KiB
12 Accepted 2/2 7ms 4172 KiB
13 Accepted 3/3 23ms 6168 KiB
14 Accepted 3/3 4ms 4200 KiB
15 Accepted 2/2 34ms 9956 KiB
16 Accepted 2/2 37ms 10156 KiB
17 Accepted 3/3 25ms 9432 KiB
18 Accepted 3/3 41ms 10392 KiB