@[Onlooker_Turing_o_o](/user/339568) 搞不懂,为啥要爆栈
by 听取MLE声一片 @ 2021-12-04 09:40:36
改编译选项
by henryhu2006 @ 2021-12-04 09:42:21
@[听取MLE声一片](/user/253738) 递归形式下windows运行这题的数据会爆炸
by TonviaSzt @ 2021-12-04 09:42:28
`-Wl,--stack=536870912`
by henryhu2006 @ 2021-12-04 09:43:04
@[henryhu2006](/user/133060) 可以,但如果用非递归形式做呢?
by TonviaSzt @ 2021-12-04 09:43:36
@[Onlooker_Turing_o_o](/user/339568) 您代码怎么写的
by 听取MLE声一片 @ 2021-12-04 09:43:36
被嘲讽(((
```cpp
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 5e5+5;
int T,ltot[N],fa[N],ad[N];
int getfa(int x){
if(fa[x] == x) return x;
int rt = getfa(fa[x]);
ad[x] += ad[fa[x]];
return fa[x] = rt;
}
int main() {
scanf("%d", &T);
for(int i = 1; i < N; i++) fa[i] = i, ltot[i] = 1;
for (int i = 1; i <= T; i++){
char o;
int u, v;
cin >> o >> u >> v;
if(o == 'M'){
int fu = getfa(u), fv = getfa(v);
if(fu ^ fv){
fa[fu] = fv;
ad[fu] += ltot[fv];
ltot[fv] += ltot[fu];
ltot[fu] = 0;
}
}
else{
if(getfa(u) != getfa(v)) printf("-1\n");
else printf("%d\n", (ad[u] - ad[v] > 0 ? ad[u] - ad[v] : ad[v] - ad[u]) - 1);
}
}
return 0;
}
```
您交吧,Linux没问题(((
by TonviaSzt @ 2021-12-04 09:45:05
本地$Lemon$ 81pts
TLE三个点
by TonviaSzt @ 2021-12-04 09:46:14
@[Onlooker_Turing_o_o](/user/339568) 请自己内存开大编译选项空间
by 听取MLE声一片 @ 2021-12-04 09:47:50
那不改编译选项有办法吗?
by TonviaSzt @ 2021-12-04 09:50:38