WA20分 AC#3#4 求助QAQ
查看原帖
WA20分 AC#3#4 求助QAQ
666940
Wufei_OvO楼主2024/4/10 20:18
#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e5 + 3,Maxm = 1e5 + 3;
int Father[Maxn];
char Num_C[Maxn];
int NNN[8];
int Numm = 0;
int Ans = 0;
int F(int Num)
{
	if(Father[Num] <= 0)
	{
		return Father[Num];
	}
	if(Father[Num] == Num)
	{
		return Num;
	}
	return Father[Num] = F(Father[Num]);
}
void Print()
{
	Numm += 1;
	Ans = 0;
	memset(Father,0,sizeof(Father));
	memset(Num_C,0,sizeof(Num_C));
	int N,M;
	cin >> N >> M;
	for(int i = 1;i <= N;i++)
	{
		Father[i] = i;
		Num_C[i] = 0;
	}
	for(int i = 1;i <= M;i++)
	{
		char A;
		int X1,X2;
		cin >> A;
		if(A == 'F' || A == 'U' || A == 'T')
		{
			cin >> X1;
			if(A == 'T')
			{
				Father[X1] = -1;
			}else if(A == 'F')
			{
				Father[X1] = -2;
			}else if(A == 'U')
			{
				Father[X1] = -3;
			}
		}else
		{
			cin >> X1 >> X2;
			if(A == '+')
			{
				Father[X1] = F(X2);
				Num_C[X1] = '+';
			}else
			{
				Father[X1] = F(X2);
				Num_C[X1] = '-';
			}
		}
	}
	for(int i = 1;i <= N;i++)
	{
		int C = F(i);
		//cout << i << ' ' << C << ' ' << Num_C[i] << endl;
		if(C == -3)
		{
			Ans++;
		}
		if(C >= 0)
		{
			if(Num_C[C] == '-')
			{
				Ans++;
			}
		}
	}
	NNN[Numm] = Ans;
}
int main()
{
	int C,T;
	scanf("%d %1d",&C,&T);
	//cout << C << " " << T;
	for(int O = 1;O <= T;O++)
	{
		Print();
	}
	for(int i = 1;i <= Numm;i++)
	{
		cout << NNN[i] << " ";
	}
}
//TFU
//123
2024/4/10 20:18
加载中...