255232026-02-20 13:50:40MatematikaSportos nyaraláscpp17Accepted 40/40153ms2868 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> p1,p2;
map<pair<int,int>,int> ki;

int root(int x, vector<int>& p)
{
    if(x==p[x])
        return x;
    return p[x]=root(p[x],p);
}

void unio(int x, int y,vector<int>& p)
{
    x=root(x,p);
    y=root(y,p);
    if(x==y)
        return;
    if(x<y)
        swap(x,y);
    p[y]=x;
}

int main() {
	int n,m,k; cin >> n >> m >> k;
    int a,b;
    p1.resize(n);
    p2.resize(n);
    for(int i=0; i<n; i++)
    {
        p1[i]=i;
        p2[i]=i;
    }
    for(int i=0; i<m; i++)
    {
        cin >> a >> b; a--;b--;
        unio(a,b,p1);
    }
    for(int i=0; i<k; i++)
    {
        cin >> a >> b; a--;b--;
        unio(a,b,p2);
    }
    for(int i=0; i<n; i++)
    {
        ki[{root(i,p1),root(i,p2)}]++;
    }
    for(int i=0; i<n; i++)
    {
        cout << ki[{root(i,p1),root(i,p2)}]-1 << " ";
    }
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms508 KiB
2Accepted0/0112ms2336 KiB
3Accepted1/11ms316 KiB
4Accepted1/11ms316 KiB
5Accepted1/11ms316 KiB
6Accepted1/11ms316 KiB
7Accepted1/11ms316 KiB
8Accepted1/11ms508 KiB
9Accepted1/11ms352 KiB
10Accepted1/13ms316 KiB
11Accepted2/23ms436 KiB
12Accepted2/23ms404 KiB
13Accepted2/214ms400 KiB
14Accepted2/210ms404 KiB
15Accepted2/246ms1844 KiB
16Accepted2/261ms2352 KiB
17Accepted3/376ms2868 KiB
18Accepted3/379ms2868 KiB
19Accepted2/265ms820 KiB
20Accepted2/286ms744 KiB
21Accepted2/2103ms1588 KiB
22Accepted2/293ms2336 KiB
23Accepted3/3123ms1316 KiB
24Accepted3/3153ms1316 KiB