1. 程式人生 > >LibreOJ #109. 並查集

LibreOJ #109. 並查集

gist tchar bre har n) logs 二次 ans lin

二次聯通門 : LibreOJ #109. 並查集

/*
    LibreOJ #109. 並查集

    並查集 
*/
#include <cstdio>

#define Max 4000090
#define Mod 998244353

void read (int &now)
{
    now = 0;
    register char word = getchar ();
    while (word < 0 || word > 9)
        word = getchar ();
    while (word >= 
0 && word <= 9) { now = now * 10 + word - 0; word = getchar (); } } int N, M; int father[Max]; int Find (int x) { return father[x] == x ? x : father[x] = Find (father[x]); } inline void Merge (int x, int y) { int now_1 = Find (x); int now_2 = Find (y);
if (x != y) father[x] = y; return ; } inline int Query (int x, int y) { return Find (x) == Find (y); } int number[Max]; int main (int argc, char *argv[]) { read (N); read (M); int x, y, type; register int cur = 0; for (register int i = 1; i <= N; i ++) father[i]
= i; long long Answer = 0; for (; M --; ) { read (type); read (x); read (y); x ++; y ++; if (type == 0) Merge (x, y); else Answer = ((Answer << 1) + Query (x, y)) % Mod; } printf ("%lld", Answer); return 0; }

LibreOJ #109. 並查集