A - 并查集【2022级专题三图论课后练习】

A - 并查集

思路

模板

注意

01串的处理

代码

点击查看代码

#include<iostream>
using namespace std;

#define X first
#define Y second

typedef pair<int,int> pii;
typedef long long LL;
const char nl = '\n';
const int N = 4e6+10;
const LL mod = 998244353;
int n,m;
int p[N];
LL ans = 0;

int find(int x){
	if(p[x] != x)p[x] = find(p[x]);
	return p[x];
}

void solve(){
	int cnt = 0;
	cin >> n >> m;
	for(int i = 1; i <= n; i ++)p[i] = i;
	while(m --){
		int op,l,r;
		cin >> op >> l >> r;
		if(op == 1){
			if(find(l)==find(r))
			{
				ans *= 2;
				ans ++;
				ans %= mod;
			}
			else
			{
				ans *= 2;
				ans %= mod;
			}
		}
		else{
			p[find(l)] = find(r);
		}
	}  
	cout << ans;
 }   

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
  
	solve();
}
posted @ 2023-02-19 00:35  Keith-  阅读(27)  评论(0编辑  收藏  举报