238. 银河英雄传说边带权的并查集

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了238. 银河英雄传说边带权的并查集相关的知识,希望对你有一定的参考价值。


https://www.acwing.com/problem/content/description/240/
d[x]表示的是x到其根节点的距离
小呆呆题解

#include<bits/stdc++.h>
using namespace std;
const int N=1e4*3+10;
int p[N],d[N],cnt[N],t;
int find(int x)
{
    if(x!=p[x])
    {
        int root=find(p[x]);
        d[x]+=d[p[x]];
        p[x]=root;
    }
    return p[x];
}
int main(void)
{
    for(int i=1;i<N;i++) p[i]=i,cnt[i]=1;
    cin>>t;
    while(t--)
    {
        string op; 
        int a,b; cin>>op>>a>>b;
        if(op=="M")
        {
            int pa=find(a),pb=find(b);//连接中 d[pa]=0,因为根到根的距离为0, 连接后 d[pa]=cnt[pb]
            d[pa]=cnt[pb];
            cnt[pb]+=cnt[pa];
            p[pa]=pb;
        }
        else 
        {
            int pa=find(a),pb=find(b);
            if(pa!=pb) puts("-1");
            else cout<<max(0,abs(d[a]-d[b])-1)<<endl;//同一个合集,都到根的距离差减1就是间隔
        }
    }
    return 0;
}

以上是关于238. 银河英雄传说边带权的并查集的主要内容,如果未能解决你的问题,请参考以下文章

[并查集]校OJ-银河英雄传说

AcWing 238. 银河英雄传说 并查集模板题

acwing 238. 银河英雄传说 并查集

洛谷 P1196 [NOI2002]银河英雄传说

[洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集

ACWing 238 银河英雄传说