시간없어서 5번 테케 1,3이라도 긁을라고 단순 유니온파인드만 짜서 냈는데

tle로 1번밖에 안긁히더라고... ㅠㅠ 혹시 왜 tle인지알수잇을까??? 막 패스트 io?? 이런거 써야하는거야??


#include<stdio.h>
#include<vector>
#include<algorithm>
#define ll long long
#define S 100010
using namespace std;
int p[S];
void init(int n=(S-1)){for(int i=0;i<=n;i++) p[i]=-1;}
int find(int a){
if(p[a]<0) return a;
return p[a]=find(p[a]);
}
int uni(int a,int b){
a=find(a),b=find(b);
if(a==b) return 0;
if(-p[a]>-p[b]){
p[a]+=p[b];
p[b]=a;
}
else{
p[b]+=p[a];
p[a]=b;
}
return 1;
}
int main(){
setbuf(stdout, NULL);

int tc,t,n,m,l,s,k,a,b,q;
scanf("%d",&tc);
for(int T=1;T<=tc;T++){
scanf("%d %d",&n,&m);
init(n);
printf("Case #%d\n",T);

for(int i=0;i<m;i++){
scanf("%d",&q);
if(q==1){
scanf("%d %d %d",&a,&b,&t);
uni(a,b);
}
else{
scanf("%d %d",&a,&b);
if(find(a)==find(b))printf("0\n");
else printf("NC\n");
}
}

}
}