3214 2023. 02. 22 17:07:33 zsombor Sportos nyaralás cpp17 Elfogadva 40/40 207ms 20048 KiB
#include <iostream>
#include <vector>
#include <map>
using namespace std;

int n, m1, m2, a, b, cnt;
vector <vector <int>> g1(5e4 + 1);
vector <vector <int>> g2(5e4 + 1);
vector <int> k1(5e4 + 1, 0);
vector <int> k2(5e4 + 1, 0);
map <pair <int, int>, int> m;

void dfs1(int x) {
    if (k1[x]) return;
    k1[x] = cnt;
    for (int i : g1[x]) dfs1(i);
}

void dfs2(int x) {
    if (k2[x]) return;
    k2[x] = cnt;
    for (int i : g2[x]) dfs2(i);
}

int main()
{
    cin >> n >> m1 >> m2;
    for (int i = 0; i < m1; i++) {
        cin >> a >> b;
        g1[a].push_back(b);
        g1[b].push_back(a);
    }
    for (int i = 0; i < m2; i++) {
        cin >> a >> b;
        g2[a].push_back(b);
        g2[b].push_back(a);
    }
    cnt = 0;
    for (int i = 1; i <= n; i++) {
        if (k1[i]) continue;
        cnt++;
        dfs1(i);
    }
    cnt = 0;
    for (int i = 1; i <= n; i++) {
        if (k2[i]) continue;
        cnt++;
        dfs2(i);
    }
    for (int i = 1; i <= n; i++) m[{k1[i], k2[i]}]++;
    for (int i = 1; i <= n; i++) cout << m[{k1[i], k2[i]}] - 1 << " ";
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 40/40
1 Elfogadva 0/0 4ms 7316 KiB
2 Elfogadva 0/0 131ms 18860 KiB
3 Elfogadva 1/1 4ms 7832 KiB
4 Elfogadva 1/1 4ms 8048 KiB
5 Elfogadva 1/1 4ms 8260 KiB
6 Elfogadva 1/1 4ms 8472 KiB
7 Elfogadva 1/1 4ms 8692 KiB
8 Elfogadva 1/1 4ms 8644 KiB
9 Elfogadva 1/1 4ms 8644 KiB
10 Elfogadva 1/1 7ms 8900 KiB
11 Elfogadva 2/2 7ms 9144 KiB
12 Elfogadva 2/2 8ms 9224 KiB
13 Elfogadva 2/2 19ms 10016 KiB
14 Elfogadva 2/2 16ms 9988 KiB
15 Elfogadva 2/2 52ms 14804 KiB
16 Elfogadva 2/2 71ms 17004 KiB
17 Elfogadva 3/3 90ms 18816 KiB
18 Elfogadva 3/3 92ms 18816 KiB
19 Elfogadva 2/2 82ms 14764 KiB
20 Elfogadva 2/2 107ms 16336 KiB
21 Elfogadva 2/2 126ms 17676 KiB
22 Elfogadva 2/2 111ms 18492 KiB
23 Elfogadva 3/3 151ms 18816 KiB
24 Elfogadva 3/3 207ms 20048 KiB