5357 2023. 04. 26 12:29:57 sztomi Pletyka cpp11 Elfogadva 100/100 90ms 17620 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m, k;
    cin >> n >> m >> k;
    vector<int> kezd(k);
    vector<bool> parosban(n+1, false);
    vector<bool> paratlanban(n+1, false);
    for(int &x : kezd){
        cin >> x;
    }
    vector<vector<int>> graf(n+1, vector<int>());
    int a, b;
    for(int i = 0; i < m; i++){
        cin >> a >> b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }



    queue<int> ujak;
    for(int x : kezd){
        if(graf[x].size() > 0){
            ujak.push(x);
            parosban[x] = true;
        }
    }


    int ido = 0;
    int ptl_db = 0, ps_db = ujak.size();
    int akt;
    int reteg_meret = ujak.size(), kov_reteg_meret = 0;
    vector<int> mo;
    while(!ujak.empty()){
        akt = ujak.front();
        //cout << "akt: " << akt << " ido: " << ido << " ptl_db: " << ptl_db << " ps_db: " << ps_db << "\n";
        ujak.pop();
        reteg_meret--;

        if(ido % 2){
            for(int kov : graf[akt]){
                if(parosban[kov]) continue;
                parosban[kov] = true;
                ps_db++;
                ujak.push(kov);
                kov_reteg_meret++;
            }
        }
        else{
            for(int kov : graf[akt]){
                if(paratlanban[kov]) continue;
                paratlanban[kov] = true;
                ptl_db++;
                ujak.push(kov);
                kov_reteg_meret++;
            }
        }

        if(reteg_meret == 0){
            mo.push_back((ido % 2 ? ptl_db : ps_db));
            ido++;
            swap(reteg_meret, kov_reteg_meret);
        }
    }

    int db = max(ptl_db, ps_db);

    if(k < db){
        cout << db << "\n";
        vector<int> temp;
        for(int x : mo){
            temp.push_back(x);
            if(x == db) break;
        }
        cout << temp.size() << "\n";
        cout << k << " ";
        for(int i = 1; i < temp.size(); i++){
            cout << temp[i] << " ";
        }
        cout << "\n";
    }
    else{
        cout << k << "\n";
        cout << "1\n";
        cout << k << "\n";
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 100/100
1 Elfogadva 0/0 3ms 1828 KiB
2 Elfogadva 0/0 17ms 5700 KiB
3 Elfogadva 2/2 3ms 2236 KiB
4 Elfogadva 2/2 3ms 2500 KiB
5 Elfogadva 2/2 3ms 2792 KiB
6 Elfogadva 2/2 4ms 3168 KiB
7 Elfogadva 4/4 4ms 3496 KiB
8 Elfogadva 4/4 7ms 4168 KiB
9 Elfogadva 4/4 6ms 4324 KiB
10 Elfogadva 4/4 7ms 4464 KiB
11 Elfogadva 4/4 17ms 7032 KiB
12 Elfogadva 4/4 16ms 6888 KiB
13 Elfogadva 4/4 25ms 9116 KiB
14 Elfogadva 4/4 27ms 9664 KiB
15 Elfogadva 6/6 37ms 12420 KiB
16 Elfogadva 6/6 37ms 12432 KiB
17 Elfogadva 6/6 46ms 14784 KiB
18 Elfogadva 6/6 46ms 15044 KiB
19 Elfogadva 6/6 46ms 15620 KiB
20 Elfogadva 6/6 50ms 15628 KiB
21 Elfogadva 6/6 50ms 15624 KiB
22 Elfogadva 6/6 54ms 16140 KiB
23 Elfogadva 6/6 90ms 17620 KiB
24 Elfogadva 6/6 90ms 17356 KiB