评测姬怕是又有问题
查看原帖
评测姬怕是又有问题
339837
长涯楼主2021/8/16 08:50

我的零分记录

这是数据和输出

30000
M 1 2
M 2 3
M 3 4
M 4 5
M 5 6
M 6 7
M 7 8
M 8 9
M 9 10
M 10 11
M 11 12
M 12 13
M 13 14
M 14 15
//太多了。。。
M 29990 29991
M 29991 29992
M 29992 29993
M 29993 29994
M 29994 29995
M 29995 29996
M 29996 29997
M 29997 29998
M 29998 29999
M 29999 30000
C 1 30000
//分割线
29998

有点长,但很好理解

我的代码和输出

//Think twice,code once
#define ll long long
#include <iostream>
#include <cstdio>
using namespace std;
const int N=3e4+10;
int fa[N],dis[N];
//Fast IO
int ss[20],topp;
inline int read(){//
	register int xx=0,ff=1,cc=getchar();//
	while(!isdigit(cc)){if(cc=='-') ff=-1;cc=getchar();}
	while(isdigit(cc)) xx=xx*10+cc-48,cc=getchar();
	return xx*ff;
}
inline void write(int xx){//
	if(!xx){
		putchar(48);
		return;
	}
	if(xx<0) putchar('-'),xx=-xx;
	while(xx) ss[++topp]=xx%10,xx/=10;
	while(topp) putchar(ss[topp]+48),--topp;
}
//Fast Function
inline int Abs(int xx){return xx>0?xx:-xx;}//
inline int Max(int xx,int yy){return xx>yy?xx:yy;}//
inline int Min(int xx,int yy){return xx<yy?xx:yy;}//
inline void Swap(int& xx,int& yy){xx^=yy,yy^=xx,xx^=yy;}//
inline int find(int x){
	if(x==fa[x]) return x;
	int temp=fa[x];
	fa[x]=find(fa[x]);
	dis[x]+=dis[temp];
	return fa[x];
}
int main(){
	int T=read();
	for(int i=1;i<=N;++i) fa[i]=i;
	while(T--){
		int op=getchar(),x=read(),y=read();
		if(op=='M') fa[x=find(x)]=find(y),dis[x]=1;
		if(op=='C'){
			if(find(x)!=find(y)) printf("-1\n");
			else printf("%d\n",x==y?0:Abs(dis[x]-dis[y])-1);
		}
	}
	return 0;
}
//分割线
29998
  

一 模 一 样

耐 人 寻 味

2021/8/16 08:50
加载中...