20分求助,wa了8点
查看原帖
20分求助,wa了8点
141335
qwq2519楼主2021/8/20 21:25
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
typedef long long lxl;
template<typename T> 
inline T  max(T &a, T &b) {
	return a > b ? a : b;
}
template<typename T> 
inline T  min(T &a, T &b) {
	return a < b ? a : b;
}

inline char gt() {
	static char buf[1 << 21], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename T>
inline void  read(T &x) {
	register char ch = gt();
	x = 0;
	int w(0);
	while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
	while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
	w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x) {
	if(x < 0) x = -x, putchar('-');
	char ch[20];
	int num(0);
	while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
	while(num) putchar(ch[num--]);
	putchar('\n');
}
const int N=5e4+79;
int n,m,ans,fa[N*3];

inline int find(int x){
	while(x!=fa[x]) x=fa[x]=fa[fa[x]];
	return x;
}

inline void merge(int x,int y){
	fa[find(x)]=find(y);
}
#define debug puts("y_dove yyds");
int main() {
	read(n);read(m);
	rep(i,1,n*3) fa[i]=i;
	int op,x,y;
    rep(i,1,m)
    {
    	read(op);read(x);read(y);
    	if(x>n||y>n){
    		ans++;
    		continue;
		}
		
		int x_eat=x+n,x_enemy=x+n+n;
		int y_eat=x+n,y_enemy=y+n+n;
		
		if(op==1){
			if(find(x_eat)==find(y)||find(x)==find(y_eat)){
				ans++;
				continue;
			}
			merge(x,y);
			merge(x_eat,y_eat);
			merge(x_enemy,y_enemy);
		}
		else{
			if(find(x)==find(y)||find(x)==find(y_eat)){
				ans++;
				continue;
			}
			merge(x_eat,y);
			merge(x,y_enemy);
			merge(x_enemy,y_eat);
		}
	}
    out(ans);
	return 0;
}
2021/8/20 21:25
加载中...