Submission #73718098


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

struct DSU {
    vector<int> parent, sz;
    int forests;

    DSU() {}
    DSU(int n) {
        init(n);
    }

    void init(int n) {
        forests = n;
        parent.resize(n + 1);
        iota(parent.begin(), parent.end(), 0);
        sz.resize(n + 1, 1);
    }

    int getRoot(int u) {
        if(u == parent[u]) return u;
        return parent[u] = getRoot(parent[u]);
    }

    bool same(int u, int v) {
        return getRoot(u) == getRoot(v);
    }

    bool join(int u, int v) {
        u = getRoot(u), v = getRoot(v);
        if(u == v) return false;
        if(sz[u] < sz[v]) swap(u, v);
        sz[u] += sz[v];
        parent[v] = u;
        forests--;
        return true;
    }

    int compSize(int u) {
        return sz[getRoot(u)];
    }
};

const int MOD = 998244353;
int fp(int n, int p) {
    int res = 1;
    while (p) {
        if (p & 1) res = 1LL * res * n % MOD;
        n = 1LL * n * n % MOD;
        p >>= 1;
    }
    return res;
}

void O_O() {
    int n, m, ans = 0;
    cin >> n >> m;

    vector<array<int, 3>> edges(m);
    for (int i = 0; i < m; i++) {
        cin >> edges[i][1] >> edges[i][2];
        edges[i][0] = i + 1;
    }
    sort(edges.rbegin(), edges.rend());

    DSU dsu(n);
    for (auto& [i, u, v] : edges) {
        bool same = dsu.same(u, v);
        if (!same && dsu.forests == 2) {
            ans += fp(2, i);
            if (ans >= MOD) ans -= MOD;
        } else {
            dsu.join(u, v);
        }
    }
    cout << ans;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int TC = 1;
    // cin >> TC
    while (TC--) {
        O_O();
        if (TC) cout << '\n';
    }

    return 0;
}

Submission Info

Submission Time
Task E - Divide Graph
User Mariouma
Language C++23 (GCC 15.2.0)
Score 475
Code Size 1822 Byte
Status AC
Exec Time 22 ms
Memory 7256 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 3
AC × 36
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 02_perfect_00.txt, 02_perfect_01.txt, 02_perfect_02.txt, 02_perfect_03.txt, 02_perfect_04.txt, 02_perfect_05.txt, 02_perfect_06.txt, 02_perfect_07.txt, 02_perfect_08.txt, 03_tree_00.txt, 03_tree_01.txt, 03_tree_02.txt, 03_tree_03.txt, 03_tree_04.txt, 03_tree_05.txt, 03_tree_06.txt, 04_handmade_00.txt, 04_handmade_01.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3536 KiB
00_sample_01.txt AC 1 ms 3548 KiB
00_sample_02.txt AC 1 ms 3588 KiB
01_random_00.txt AC 12 ms 5432 KiB
01_random_01.txt AC 11 ms 5008 KiB
01_random_02.txt AC 10 ms 4800 KiB
01_random_03.txt AC 2 ms 3836 KiB
01_random_04.txt AC 13 ms 5188 KiB
01_random_05.txt AC 10 ms 4884 KiB
01_random_06.txt AC 8 ms 4672 KiB
01_random_07.txt AC 9 ms 4536 KiB
01_random_08.txt AC 12 ms 5140 KiB
01_random_09.txt AC 9 ms 4668 KiB
01_random_10.txt AC 18 ms 6980 KiB
01_random_11.txt AC 18 ms 6852 KiB
01_random_12.txt AC 20 ms 6980 KiB
01_random_13.txt AC 12 ms 5636 KiB
01_random_14.txt AC 17 ms 6584 KiB
02_perfect_00.txt AC 13 ms 5720 KiB
02_perfect_01.txt AC 14 ms 5692 KiB
02_perfect_02.txt AC 14 ms 5648 KiB
02_perfect_03.txt AC 18 ms 5700 KiB
02_perfect_04.txt AC 13 ms 5688 KiB
02_perfect_05.txt AC 18 ms 5616 KiB
02_perfect_06.txt AC 14 ms 5740 KiB
02_perfect_07.txt AC 14 ms 5700 KiB
02_perfect_08.txt AC 14 ms 5696 KiB
03_tree_00.txt AC 20 ms 7224 KiB
03_tree_01.txt AC 22 ms 7224 KiB
03_tree_02.txt AC 18 ms 7188 KiB
03_tree_03.txt AC 20 ms 7224 KiB
03_tree_04.txt AC 21 ms 7256 KiB
03_tree_05.txt AC 20 ms 7172 KiB
03_tree_06.txt AC 19 ms 7248 KiB
04_handmade_00.txt AC 1 ms 3456 KiB
04_handmade_01.txt AC 16 ms 7224 KiB