11092022-03-03 18:47:23peti1234Sportos nyaraláscpp14Accepted 40/4071ms17272 KiB
#include <bits/stdc++.h>

using namespace std;
int n, s[2], ki[50005][2];
map<pair<int, int>, int> m;

// ket unio-holvan, id azt mutatja, hogy melyik komponens
int holvan(int a, int id) {
    return (ki[a][id] ? ki[a][id]=holvan(ki[a][id], id) : a);
}
void unio(int a, int b, int id) {
    a=holvan(a, id), b=holvan(b, id);
    if (a!=b) {
        ki[a][id]=b;
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    // van a bemenet mereteval aranyos megoldas is, de ez egyszerubb
    cin >> n >> s[0] >> s[1];
    // kicsit trukkos beolvasas, igy egy for ciklussal lehet ketszer ugyanazt csinalni
    for (int i=0; i<2; i++) {
        for (int j=1; j<=s[i]; j++) {
            int a, b;
            cin >> a >> b;
            unio(a, b, i);
        }
    }

    // egy (a, b) par pontosan akkor jo, ha mindet szinnel egy komponensben vannak, vagyis holvan(a, 0)=holvan(b, 0) es holvan(a, 1)=holvan(b, 1)
    for (int i=1; i<=n; i++) {
        m[{holvan(i, 0), holvan(i, 1)}]++;
    }
    for (int i=1; i<=n; i++) {
        cout << m[{holvan(i, 0), holvan(i, 1)}]-1 << " ";
    }
    // ez igy lehet a legegyszerubben megcsinlani
    cout << "\n";
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/02ms1948 KiB
2Accepted0/065ms7428 KiB
3Accepted1/11ms3388 KiB
4Accepted1/11ms3412 KiB
5Accepted1/11ms3420 KiB
6Accepted1/11ms3428 KiB
7Accepted1/11ms3432 KiB
8Accepted1/11ms3440 KiB
9Accepted1/11ms3440 KiB
10Accepted1/12ms3452 KiB
11Accepted2/22ms3532 KiB
12Accepted2/22ms3544 KiB
13Accepted2/27ms3784 KiB
14Accepted2/24ms3888 KiB
15Accepted2/229ms7412 KiB
16Accepted2/239ms8984 KiB
17Accepted3/354ms10824 KiB
18Accepted3/350ms11432 KiB
19Accepted2/229ms8400 KiB
20Accepted2/235ms9464 KiB
21Accepted2/246ms12332 KiB
22Accepted2/252ms15088 KiB
23Accepted3/354ms14576 KiB
24Accepted3/371ms17272 KiB