社区讨论

本地运行成功,洛谷全WA???

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

讨论操作

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

当前回复
15 条
当前快照
1 份
快照标识符
@mi7z2338
此快照首次捕获于
2025/11/21 05:57
4 个月前
此快照最后确认于
2025/11/21 06:47
4 个月前
查看原帖
代码
CPP
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int t,f[30001],d[30001],size[30001];
char mod;
int getf(int v)
{
	if(f[v]==v) return v;
	d[v]+=d[f[v]];
	return f[v]=getf(f[v]);
}
void merge(int x,int y)
{
	x=getf(x),y=getf(y);
	f[x]=y,d[x]=size[y];
	size[y]+=size[x];
	return;
}
int read()
{
	char c=getchar();
	int x=0,f=1;
	while(!isdigit(c))
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(isdigit(c))
	{
		x=x*10+c-48;
		c=getchar();
	}
	return x*f;
}
int main()
{
	t=read();
	for(int i=1;i<=30000;i++)
	{
		f[i]=i;
		size[i]=1;
	}
	for(int i=1;i<=t;i++)
	{
		int x,y;
		scanf("%c",&mod);
		x=read(),y=read();
		if(mod=='M') merge(x,y);
		else
		{
			if(getf(x)==getf(y)) printf("%d\n",abs(d[y]-d[x])-1);
			else printf("-1\n");
		}
	}
	return 0;
}
难道是Linux的锅???
数据:
CPP
10
M 3 4
M 3 5
M 1 2
M 1 3
C 3 1
C 5 1
C 3 4
C 3 5
C 5 1
C 4 2
输出
CPP
1
3
0
1
3
1

回复

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

正在加载回复...