首页 > 代码库 > LibreOJ #109. 并查集
LibreOJ #109. 并查集
二次联通门 : 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. 并查集
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。