社区讨论
奇葩!!!
P1196[NOI2002] 银河英雄传说参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi7rqa6t
- 此快照首次捕获于
- 2025/11/21 02:32 4 个月前
- 此快照最后确认于
- 2025/11/21 02:32 4 个月前
AC代码
CPP#include<bits/stdc++.h>
#define rt register int
#define M 300010
using namespace std;
int T,x,y,xx,yy,s[M],k[M],f[M];char c[2];
inline int find(rt z)
{
if(f[z]==z)return f[z];
rt xx=find(f[z]); //此处
s[z]+=s[f[z]];
return f[z]=xx; //此处
}
int main()
{
scanf("%d",&T);
for(rt i=1;i<=M;++i) f[i]=i,k[i]=1;
for(rt i=1;i<=T;++i)
{
scanf("%s%d%d",c,&x,&y);
xx=find(x),yy=find(y);
if(c[0]=='M')
{
f[xx]=yy;
s[xx]+=k[yy];
k[yy]+=k[xx],k[xx]=0;
}
if(c[0]=='C')
if(xx!=yy) printf("-1\n");
else printf("%d\n",abs(s[x]-s[y])-1);
}return 0;
}
12分代码
CPP#include<bits/stdc++.h>
#define rt register int
#define M 300010
using namespace std;
int T,x,y,xx,yy,s[M],k[M],f[M];char c[2];
inline int find(rt z)
{
if(f[z]==z)return f[z];
s[z]+=s[f[z]];
return f[z]=find(f[z]); //此处
}
int main()
{
scanf("%d",&T);
for(rt i=1;i<=M;++i) f[i]=i,k[i]=1;
for(rt i=1;i<=T;++i)
{
scanf("%s%d%d",c,&x,&y);
xx=find(x),yy=find(y);
if(c[0]=='M')
{
f[xx]=yy;
s[xx]+=k[yy];
k[yy]+=k[xx],k[xx]=0;
}
if(c[0]=='C')
if(xx!=yy) printf("-1\n");
else printf("%d\n",abs(s[x]-s[y])-1);
}return 0;
}
为什么那里有这么大的区别啊?
好像没什么区别啊
回复
共 1 条回复,欢迎继续交流。
正在加载回复...