40分求调
查看原帖
40分求调
733958
lzc120518楼主2024/4/21 13:22
#include<bits/stdc++.h>

using namespace std;

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

void merge(int x, int y)
{
	int fx = find(x), fy = find(y);
	fa[fx] = fy;
}

bool v[2005];

int main()
{
	int n, m;
	cin >> n >> m;
	for(int i = 1; i <= 2 * n; i++)
		fa[i] = i;
	for(int i = 1; i <= m; i++)
	{
		char op;
		int x, y;
		cin >> op >> x >> y;
		if(op == 'F')
		{
			merge(x, y);
			merge(x + n, y + n);
		}
		else
		{
			merge(x + n, y);
			merge(x, y + n);
		}
	}
	for(int i = 1; i <= 2 * n; i++)
		fa[i] = find(i);
	int ans = 0;
	for(int i = 1; i <= n; i++)
		if(v[fa[i]] == 0) 
		{
			ans++;
			v[fa[i]] = 1;
		}
	cout << ans << endl;
	return 0;
}
2024/4/21 13:22
加载中...