14202022-09-09 15:41:07kidesoSportos nyaraláscpp17Accepted 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;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/04ms6464 KiB
2Accepted0/0130ms17076 KiB
3Accepted1/14ms6992 KiB
4Accepted1/14ms6936 KiB
5Accepted1/14ms7220 KiB
6Accepted1/14ms7344 KiB
7Accepted1/14ms7540 KiB
8Accepted1/14ms7620 KiB
9Accepted1/14ms7704 KiB
10Accepted1/16ms7972 KiB
11Accepted2/26ms8072 KiB
12Accepted2/26ms8200 KiB
13Accepted2/217ms8640 KiB
14Accepted2/214ms8536 KiB
15Accepted2/252ms13728 KiB
16Accepted2/271ms15760 KiB
17Accepted3/387ms17744 KiB
18Accepted3/390ms17560 KiB
19Accepted2/279ms12884 KiB
20Accepted2/2105ms14432 KiB
21Accepted2/2123ms16324 KiB
22Accepted2/2109ms17120 KiB
23Accepted3/3149ms16428 KiB
24Accepted3/3179ms17552 KiB