11092022-03-03 18:47:23peti1234Sportos nyaraláscpp14Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/02ms1948 KiB
2Elfogadva0/065ms7428 KiB
3Elfogadva1/11ms3388 KiB
4Elfogadva1/11ms3412 KiB
5Elfogadva1/11ms3420 KiB
6Elfogadva1/11ms3428 KiB
7Elfogadva1/11ms3432 KiB
8Elfogadva1/11ms3440 KiB
9Elfogadva1/11ms3440 KiB
10Elfogadva1/12ms3452 KiB
11Elfogadva2/22ms3532 KiB
12Elfogadva2/22ms3544 KiB
13Elfogadva2/27ms3784 KiB
14Elfogadva2/24ms3888 KiB
15Elfogadva2/229ms7412 KiB
16Elfogadva2/239ms8984 KiB
17Elfogadva3/354ms10824 KiB
18Elfogadva3/350ms11432 KiB
19Elfogadva2/229ms8400 KiB
20Elfogadva2/235ms9464 KiB
21Elfogadva2/246ms12332 KiB
22Elfogadva2/252ms15088 KiB
23Elfogadva3/354ms14576 KiB
24Elfogadva3/371ms17272 KiB