已AC,但是有个疑惑的点,求助各位大佬们。
查看原帖
已AC,但是有个疑惑的点,求助各位大佬们。
286752
h1910819075楼主2021/4/16 09:44

为什么我特判a==b,只得到了50分,并且样例也没有过,如果我不特判这个条件,就会全对呢?

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
int fa[3*N];

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

int main()
{
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=3*n;i++)
		fa[i]=i;
	
	int cnt=0; 
	for(int i=1;i<=k;i++)
	{
		int c,a,b;
		scanf("%d%d%d",&c,&a,&b);
		if(a>n||b>n)
			cnt++;
		else if(a==b)//就是这两行,我一加上就只得50分,连样例都没有过 
			cnt++;//这是为什么呢? 
		else
		{
			if(c==1)
			{
				if(find(n+a)==find(b)||find(2*n+a)==find(b))
					cnt++;
				else
				{
					fa[find(a)]=find(b);
					fa[find(n+a)]=find(n+b);
					fa[find((2*n)+a)]=find((2*n)+b);
				}
			}
			else  
			{
				if(find(a)==find(b)||find(2*n+a)==find(b))
					cnt++;
				else
				{
					fa[find(n+a)]=find(b);
					fa[find((2*n)+a)]=find(n+b);
					fa[find(a)]=find((2*n)+b);
				}
			}	
		} 
	}
	//for(int i=1;i<=3*n;i++)
	//	printf("%d ",fa[i]);printf("\n\n");
	
	printf("%d\n",cnt);
	return 0;
}
2021/4/16 09:44
加载中...