奇怪的情况(不开O2是AC的,开了O2就WA+TLE?)(?)
查看原帖
奇怪的情况(不开O2是AC的,开了O2就WA+TLE?)(?)
235125
Starrykiller暁美 ほむら楼主2023/5/5 23:47

C++14 O2

C++14 Without O2

代码如下:

#include <bits/stdc++.h>

using namespace std;
#define reg register
const int MAXN=3e4+10;
int t, n=MAXN;
int fa[MAXN], d[MAXN], siz[MAXN];

inline void init() {
    for (reg int i=1; i<=n; ++i) {
        fa[i]=i;
        d[i]=0;
        siz[i]=1;
    }
}

inline int get(int x) {
    if (fa[x]==x) return x;
    int root=get(fa[x]);
    d[x]+=d[fa[x]];
    return fa[x]=root;
}

inline void merge(int x, int y) {
    // x->y
    x=get(x), y=get(y);
    fa[x]=y, d[x]=siz[y];
    siz[y]+=siz[x];
}

void solve() {
    char opt; int x, y;
    while (t--) {
        opt=getchar();
        while (opt!='M'&&opt!='C') opt=getchar();
        scanf("%d%d",&x,&y);
        if (opt=='M') {
            if (get(x)==get(y)) continue;
            merge(x,y);
        }
        else {
            if (get(x)==get(y)) {
                int res=max(abs(d[x]-d[y])-1,0);
                printf("%d\n",res);
            }
            else puts("-1");
        }
    }
}

void input() {
    scanf("%d",&t);
}

int main() {
    input();
    init();
    solve();
    return 0;
}
2023/5/5 23:47
加载中...