社区讨论

大神求教,哪里出了问题?

P1196[NOI2002] 银河英雄传说参与者 6已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@locb4wy0
此快照首次捕获于
2023/10/30 10:55
2 年前
此快照最后确认于
2023/11/04 22:43
2 年前
查看原帖
CPP
#include<iostream>
#include<cstdio>
//#include<bits/stdc++.h>
using namespace std;
int fx,fy,front[30005],num[30005],fa[30005],x,y,xx,yy,n;
char ch;
int find(int x)
{
	if(x!=fa[x])
	{
		front[x]+=front[fa[x]];
		fa[x]=find(fa[x]);
	}
	return fa[x];
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=30000;i++)front[i]=0,num[i]=1,fa[i]=i;
	for(int i=1;i<=n;i++)
	{
		cin>>ch>>x>>y;
		//scanf("%c %d %d",&ch,&x,&y);
		fx=find(x);
		fy=find(y);
		if(ch=='M')
		{
			front[fx]+=num[fy];
			fa[fx]=fy;
			num[fy]+=num[fx];
			num[fx]=0;
		}
		if(ch=='C')
		{
			if(fx!=fy)
			{
				printf("-1\n");
			}
			else
			if(fx==fy)
			{
				printf("%d\n",abs(front[x]-front[y])-1);

			}
		}
	}
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...