求助
查看原帖
求助
492281
longerfu楼主2024/11/28 16:18

调了一下午了,错哪里类,求调

#include <iostream>
#include <algorithm>
using namespace std;
int t;
struct uf_set
{
    int fa[100005];
    int sum[100005];
    int dis[100005];
    void init()
    {
        for(int i=1;i<=30000;i++) fa[i] = i,sum[i]=1,dis[i]=0;
    }
    int find(int x)
    {
        if(fa[x]==x) return x;
        dis[x]+=dis[fa[x]];
        return fa[x] = find(fa[x]);
    }
    void merge(int x,int y)
    {
        int fx = find(x);
        int fy = find(y);
        fa[fx] = fy;
        dis[fx] += sum[fy];
        sum[fy]+=sum[fx];
        sum[fx] = 0;
        return;
    }
    bool pd(int x,int y)
    {
        if(find(x)==find(y)) return true;
        else return false;
    }
    int query(int x,int y)
    {
       return abs(dis[x]-dis[y])-1;
    }
}uf;
int main()
{
    cin>>t;
    uf.init();
    while(t--)
    {
        char opt;
        int x,y;
        cin>>opt>>x>>y;      
        if(opt=='M')
        {
            uf.merge(x,y);
        }   
        else {
            if(uf.pd(x,y))
            {
                int c1 = uf.query(x,y);
                cout<<c1<<endl;
            }
            else
            {
                cout<<-1<<endl;
            }
        }                                                                 
    }
    return 0;
}
2024/11/28 16:18
加载中...