7502022-01-07 09:07:12pgergo03Üzletlánccpp14Accepted 40/40128ms12908 KiB
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

struct Graf
{
    vector<int> sz;
    bool volt=false;
    int A=1000000, B=1000000;
    char er;
};

int N, M, A, B;
int Adb=0, Bdb=0;
Graf g[40001];

void szelbejarA()
{
    g[A].A=0;
    queue<int> q;
    q.push(A);
    int p;
    while(!q.empty())
    {
        p=q.front();
        q.pop();
        for(int i=0; i<g[p].sz.size(); i++)
        {
            int j=g[p].sz[i];
            if(g[j].A==1000000)
            {
                q.push(j);
                g[j].A=g[p].A+1;
            }
        }
    }
}

void szelbejarB()
{
    g[B].B=0;
    queue<int> q;
    q.push(B);
    int p;
    while(!q.empty())
    {
        p=q.front();
        q.pop();
        for(int i=0; i<g[p].sz.size(); i++)
        {
            int j=g[p].sz[i];
            if(g[j].B==1000000)
            {
                q.push(j);
                g[j].B=g[p].B+1;
            }
        }
    }
}

struct comp
{
    bool operator()(int a, int b)
    {
        if(abs(g[a].A-g[a].B)!=abs(g[b].A-g[b].B))
            return abs(g[a].A-g[a].B)<abs(g[b].A-g[b].B);
        return a>b;
    }
};

int main()
{
    cin >> N >> M >> A >> B;
    int b1, b2;
    for(int i=0; i<M; i++)
    {
        cin >> b1 >> b2;
        g[b1].sz.push_back(b2);
        g[b2].sz.push_back(b1);
    }

    szelbejarA();
    szelbejarB();

    priority_queue<int, vector<int>, comp> pq;
    for(int i=1; i<=N; i++)
        pq.push(i);

    int K=0;
    int idx;
    while(!pq.empty())
    {
        idx=pq.top();
        pq.pop();
        if(Adb<N/2 && Bdb<N/2)
        {
            if(g[idx].A<=g[idx].B)
            {
                Adb++;
                K+=g[idx].A;
                g[idx].er='A';
            }
            else
            {
                Bdb++;
                K+=g[idx].B;
                g[idx].er='B';
            }
        }
        else if(Adb<N/2)
        {
            Adb++;
            K+=g[idx].A;
            g[idx].er='A';
        }
        else
        {
            Bdb++;
            K+=g[idx].B;
            g[idx].er='B';
        }
    }

    cout << K << endl;
    for(int i=1; i<=N; i++)
        cout << g[i].er;
    cout << endl;

    return 0;
}
/*
6 7 1 3
1 2
3 1
3 4
1 5
2 6
6 5
4 5
*/
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/03ms4840 KiB
2Accepted0/03ms4880 KiB
3Accepted2/23ms4944 KiB
4Accepted2/23ms4948 KiB
5Accepted3/32ms4952 KiB
6Accepted3/38ms4948 KiB
7Accepted2/23ms4992 KiB
8Accepted2/23ms4964 KiB
9Accepted3/33ms4976 KiB
10Accepted3/33ms5004 KiB
11Accepted2/210ms5452 KiB
12Accepted2/214ms5696 KiB
13Accepted3/356ms8360 KiB
14Accepted3/37ms6352 KiB
15Accepted2/270ms10264 KiB
16Accepted2/2112ms11372 KiB
17Accepted3/371ms11124 KiB
18Accepted3/3128ms12908 KiB