255472026-02-20 17:25:56KevinSportos nyaraláscpp17Accepted 40/4063ms7968 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using pll=pair<ll, ll>;

vector<ll> bicikli, kajak;
vector<set<ll>> setB, setK;

ll rootB(ll x){
    if (bicikli[x]==x) return x;
    bicikli[x]=rootB(bicikli[x]);
    return bicikli[x];
}

ll rootK(ll x){
    if (kajak[x]==x) return x;
    kajak[x]=rootK(kajak[x]);
    return kajak[x];
}

void unioB(ll a, ll b){
    a=rootB(a); b=rootB(b);
    if (a>b) swap(a, b);
    bicikli[b]=a;
}

void unioK(ll a, ll b){
    a=rootK(a); b=rootK(b);
    if (a>b) swap(a, b);
    kajak[b]=a;
}

int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n, m, k; cin >> n >> m >> k;
    bicikli.resize(n); kajak.resize(n);
    setB.resize(n); setK.resize(n);
    for (ll i=0; i<n; i++){
        bicikli[i]=i; kajak[i]=i;
    }
    for (ll i=0; i<m; i++){
        ll a, b; cin >> a >> b; a--; b--;
        unioB(a, b);
    }
    for (ll i=0; i<k; i++){
        ll a, b; cin >> a >> b; a--; b--;
        unioK(a, b);
    }
    map<pll, ll> mp;
    for (ll i=0; i<n; i++) mp[{bicikli[rootB(i)], kajak[rootK(i)]}]++;
    for (ll i=0; i<n; i++) cout << mp[{bicikli[rootB(i)], kajak[rootK(i)]}]-1 << ' ';
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms500 KiB
2Accepted0/057ms7456 KiB
3Accepted1/11ms316 KiB
4Accepted1/11ms316 KiB
5Accepted1/11ms316 KiB
6Accepted1/11ms332 KiB
7Accepted1/12ms316 KiB
8Accepted1/11ms316 KiB
9Accepted1/11ms316 KiB
10Accepted1/12ms316 KiB
11Accepted2/22ms536 KiB
12Accepted2/22ms316 KiB
13Accepted2/26ms508 KiB
14Accepted2/24ms532 KiB
15Accepted2/228ms4892 KiB
16Accepted2/239ms6444 KiB
17Accepted3/350ms7964 KiB
18Accepted3/348ms7968 KiB
19Accepted2/229ms3988 KiB
20Accepted2/237ms5052 KiB
21Accepted2/252ms6708 KiB
22Accepted2/246ms7476 KiB
23Accepted3/354ms6436 KiB
24Accepted3/363ms6432 KiB