求调
查看原帖
求调
763542
Furina_Hate_Comma楼主2024/8/11 21:45
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 200010;

int fa[N];
int g[N];
int find(int p){
	if(fa[p] == p) return p;
	fa[p] = find(fa[p]);
	return fa[p];
}
void solve(){
	int n, k, ans = 0;
	cin >> n >> k;
	for(int i = 1 ; i <= n ; i ++) fa[i] = i;
	for(int i = 1 ; i <= k ; i ++){
		int md, x, y;
		cin >> md >> x >> y;
		if(x > n || y > n){
			ans ++;
			continue;
		}
		if(md == 1){
			int fx = find(x), fy = find(y);
			if(fx == fy) continue;
			if((g[fx] && (1 << fy)) || (g[fy] && (1 << fx))){
				ans ++;
				continue;
			}
			g[fy] |= g[fx];
			fa[fx] = fy;
		}
		else{
			int fx = find(x), fy = find(y);
			if(fx == fy){
				ans ++;
				continue;
			}
			g[fx] |= (1 << fy);
			g[fy] |= (1 << fx);
		}
	}
	cout << ans << '\n';
}

signed main(){

	solve();

	return 0;
}

AC 1 3

20pts

2024/8/11 21:45
加载中...