栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


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

#include
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>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<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号