749 2022. 01. 07 09:05:18 pgergo03 Üzletlánc cpp11 Elfogadva 40/40 119ms 12960 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
*/
Részfeladat Összpont Teszt Verdikt Idő Memória
base 40/40
1 Elfogadva 0/0 4ms 4896 KiB
2 Elfogadva 0/0 3ms 4956 KiB
3 Elfogadva 2/2 3ms 4956 KiB
4 Elfogadva 2/2 3ms 4936 KiB
5 Elfogadva 3/3 3ms 4940 KiB
6 Elfogadva 3/3 3ms 4940 KiB
7 Elfogadva 2/2 4ms 4948 KiB
8 Elfogadva 2/2 4ms 4956 KiB
9 Elfogadva 3/3 4ms 4960 KiB
10 Elfogadva 3/3 3ms 4968 KiB
11 Elfogadva 2/2 12ms 5448 KiB
12 Elfogadva 2/2 16ms 5688 KiB
13 Elfogadva 3/3 83ms 8272 KiB
14 Elfogadva 3/3 7ms 6344 KiB
15 Elfogadva 2/2 75ms 10260 KiB
16 Elfogadva 2/2 119ms 11328 KiB
17 Elfogadva 3/3 50ms 11116 KiB
18 Elfogadva 3/3 85ms 12960 KiB