1230 2022. 03. 27 11:49:23 Szin Attila Pletyka cpp14 Elfogadva 100/100 118ms 43876 KiB
#include <bits/stdc++.h>
using namespace std;
#define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
using ll = long long;

const int maxN = 2e5 + 5;
const int MOD = 1e9 + 7;

inline int read(){
    int res=0; char ch=getchar();
    while(ch < '0' || '9' < ch) ch=getchar();
    while('0' <= ch && ch <= '9'){
        res=(res<<3) + (res<<1)+ch-'0';
        ch=getchar();
    }
    return res;
}


int main() {
    /*freopen("../input.txt", "r", stdin);
    freopen("../output.txt", "w", stdout);*/
   InTheNameOfGod;
    
    int n,m,k;
    n = read(); m = read(); k = read();

    vector<vector<int> > g(n+1), tav(n+1, vector<int>(2, -1));
    vector<int> a(k);

    for(int &i : a) i = read();

    for(int i = 0; i < m; i++) {
        int x,y;
        x = read(); y = read();
        g[x].push_back(y);
        g[y].push_back(x);
    }

    vector<int > pref(n+3, 0);
    queue<pair<int, int > > sor;

    for(int i = 0; i < k; i++) {
        if(!g[a[i]].empty()) {
            tav[a[i]][0] = 1;
            pref[1]++;
            sor.push({a[i], 0});
        }
        else {
            pref[1]++;
            pref[3]--;
            //cout << "empty: " << a[i] << endl;
        }
    }

    while(!sor.empty()) {
        pair<int, bool> cur = sor.front();
        sor.pop();

        //cout << cur.first << ", " << cur.second << ": " << tav[cur.first][cur.second] << endl;

        for(int sz : g[cur.first]) {
            if(tav[sz][1-cur.second] != -1) continue;

            tav[sz][1-cur.second] = tav[cur.first][cur.second] + 1;
            pref[tav[sz][1-cur.second]]++;
            sor.push({sz, 1-cur.second});
        }
    }

    /*for(int i = 1; i < 7; i++) cout << pref[i][0] << ' ';
    cout << endl;
    for(int i = 1; i < 7; i++) cout << pref[i][1] << ' ';
    cout << endl;*/

    vector<int> mo(n+3, 0);
    mo[1] = pref[1];
    int maxi = mo[1], ind = 1;
    for(int i = 2; i < pref.size(); i++) { 
        mo[i] = pref[i] + mo[i-2];
        
        if(mo[i] > maxi) {
            maxi = mo[i];
            ind = i;
        }
    }

    cout << maxi << "\n" << ind << "\n";
    for(int i = 1; i <= ind; i++) cout << mo[i] << ' ';
    cout << "\n";

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 100/100
1 Elfogadva 0/0 2ms 1820 KiB
2 Elfogadva 0/0 18ms 9204 KiB
3 Elfogadva 2/2 1ms 2216 KiB
4 Elfogadva 2/2 2ms 2456 KiB
5 Elfogadva 2/2 2ms 2716 KiB
6 Elfogadva 2/2 3ms 3468 KiB
7 Elfogadva 4/4 4ms 3520 KiB
8 Elfogadva 4/4 6ms 4676 KiB
9 Elfogadva 4/4 4ms 4772 KiB
10 Elfogadva 4/4 4ms 4868 KiB
11 Elfogadva 4/4 17ms 9908 KiB
12 Elfogadva 4/4 16ms 10240 KiB
13 Elfogadva 4/4 27ms 15432 KiB
14 Elfogadva 4/4 30ms 16020 KiB
15 Elfogadva 6/6 48ms 21440 KiB
16 Elfogadva 6/6 46ms 22248 KiB
17 Elfogadva 6/6 78ms 28040 KiB
18 Elfogadva 6/6 85ms 29024 KiB
19 Elfogadva 6/6 79ms 32660 KiB
20 Elfogadva 6/6 75ms 33816 KiB
21 Elfogadva 6/6 96ms 34964 KiB
22 Elfogadva 6/6 92ms 36136 KiB
23 Elfogadva 6/6 118ms 41348 KiB
24 Elfogadva 6/6 115ms 43876 KiB