DMOJ · dmopc16c2p2

DMOPC '16 Contest 2 P2 - Ebola Outbreak

This C++ solution uses disjoint set union for DMOJ dmopc16c2p2 DMOPC '16 Contest 2 P2 - Ebola Outbreak. Read the reasoning, inspect the code, or try your own test case below.

dmopc16c2p2Graphs & treesDisjoint set unionC++36 lines
Solution083of 248
Open official problem ↗ Download C++ file ↓ Search the library → Open full Code Lab ↗ Report an issue ↗

Approach

Disjoint set union

Ebola Outbreak uses class memberships to find everyone connected to student 1; the DSU implementation matches.

Graphs & trees

Problem and code

Useful links.

Written by benbenyaojifen. Try the problem first, then compare your approach with the code.

Open official problem ↗View exact source file ↗
Implementation

P_2_Ebola_Outbreak.cpp

C++

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int INF = 0x3f3f3f3f; //❄️
    vector<int> parent;
    int find(int x) {
        if(parent[x] == x) return x;
        return parent[x] = find(parent[x]);
    }
    void unite(int x, int y) {
        x = find(x); y = find(y);
        parent[x] = y;
    }
    int main() {
        ios::sync_with_stdio(0); cin.tie(0); 
        int n, m; cin >> n >> m;
        parent.resize(n + 1);
        for (int i = 0; i <= n; i++) parent[i] = i;
        for (int i = 0; i < m; i++) {
            int c; cin >> c;
            int leader; cin >> leader;
            for (int j = 1; j < c; j++) {
                int k; cin >> k;
                unite(leader, k);
            }
        }
        vector<int> ans;
        int root = find(1);
        for (int i = 1; i <= n; i++) {
            if (find(i) == root) ans.push_back(i);
        }
        sort(ans.begin(), ans.end());
        cout << ans.size() << '\n';
        for (int i = 0; i < ans.size(); i++) cout << ans[i] << " \n"[i == ans.size() - 1];
        return 0;
    }
        

Did this explanation save you time? I'm a Grade 11 student building this free library to make difficult algorithms easier to understand.

Buy me a coffee ↗Keep studying →

Test this problem

Run your code here.

Paste your code, run a test case, compare the output, or trace selected values.

Full trace, comparison & stress testing ↗
StatusReady
Output
No run yet.
Diagnostics
No diagnostics yet.

Each run is isolated and has strict limits. Passing one test does not guarantee the judge will accept the solution.