不懂,带权并查集更新权值
  • 板块学术版
  • 楼主llamn
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/26 17:59
  • 上次更新2024/3/26 20:39:28
查看原帖
不懂,带权并查集更新权值
1038651
llamn楼主2024/3/26 17:59

做银河英雄传说遇到的
在getf()中先更新f[x]的值还是先求权值?
WA:

int getf(int x)//先求权后更新
{
    if (f[x] == x) return x;
    else 
    {
    	ju[x] += ju[f[x]];  //ju[]记录与队头的距离      
        f[x] = getf(f[x]);
        return f[x];
    }
}
或者
int getf(int x)//先更新后求权
{
    if (f[x] == x) return x;
    else 
    {
        f[x] = getf(f[x]);
        ju[x] += ju[f[x]];
        return f[x];
    }
}

但是AC就是:

int getf(int x)
{
    if (f[x] == x) return x;
    else 
    {
        int t = getf(f[x]);
        ju[x] += ju[f[x]];
        f[x] = t;
        return f[x];
    }
}

getf()应该没有更新f[x]啊?这个AC和第一个WA有什么区别……
%%%

2024/3/26 17:59
加载中...