14202022-09-09 15:41:07kidesoSportos nyaraláscpp17Elfogadva 40/40179ms17744 KiB
#include <iostream>
#include <queue>
#include <map>

using namespace std;

const int maxN = 50001;
vector<int> x[maxN][2];
int komponens[maxN][2];
bool l[maxN][2];
int N, M, K, i, a, b;

void szel(int kp, int t, int sz){
    queue<int> y;
    int p;
    
    l[kp][t] = true;
    komponens[kp][t] = sz;
    y.push(kp);

    while(!y.empty()){
        p = y.front();
        y.pop();

        for(auto index : x[p][t])
            if(!l[index][t]){
                l[index][t] = true;
                komponens[index][t] = sz;
                y.push(index);
            }
    }
}

void komponensek(int t){
    int sz = 1;
    for(i = 1; i <= N; ++i)
        if(!l[i][t]){
            szel(i, t, sz);
            ++sz;
        }
}

void beolvas(int M, int t){
    while(M--){
        cin >> a >> b;
        x[a][t].push_back(b);
        x[b][t].push_back(a);
    }
}

int main(){
    cin >> N >> M >> K;

    beolvas(M, 0), beolvas(K, 1);
    komponensek(0), komponensek(1);

    map<pair<int, int>, int > m;

    for(i = 1; i <= N; ++i)
        ++m[{komponens[i][0], komponens[i][1]}];

    for(i = 1; i <= N; ++i)
        cout << m[{komponens[i][0], komponens[i][1]}] - 1 << ' ';

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/04ms6464 KiB
2Elfogadva0/0130ms17076 KiB
3Elfogadva1/14ms6992 KiB
4Elfogadva1/14ms6936 KiB
5Elfogadva1/14ms7220 KiB
6Elfogadva1/14ms7344 KiB
7Elfogadva1/14ms7540 KiB
8Elfogadva1/14ms7620 KiB
9Elfogadva1/14ms7704 KiB
10Elfogadva1/16ms7972 KiB
11Elfogadva2/26ms8072 KiB
12Elfogadva2/26ms8200 KiB
13Elfogadva2/217ms8640 KiB
14Elfogadva2/214ms8536 KiB
15Elfogadva2/252ms13728 KiB
16Elfogadva2/271ms15760 KiB
17Elfogadva3/387ms17744 KiB
18Elfogadva3/390ms17560 KiB
19Elfogadva2/279ms12884 KiB
20Elfogadva2/2105ms14432 KiB
21Elfogadva2/2123ms16324 KiB
22Elfogadva2/2109ms17120 KiB
23Elfogadva3/3149ms16428 KiB
24Elfogadva3/3179ms17552 KiB