zoukankan      html  css  js  c++  java
  • 并查集模板

          并查集是一种神奇的算法,利用好可以解决许多高深的问题,尤其是其扩展应用,可以轻松秒掉一些难题。

    pascal模板

    基础并查集:

    初始化

    for i:=1 to n do father[i]:=i;

    查找

    function sf(x:longint):longint;
    begin
          if f[x]=x then exit(x)
          else f[x]:=sf(f[x]);
          exit(f[x]);
    end;

    加权并查集:
    初始化

    for i:=1 to n do
        begin
          f[i]:=i;
          r[i]:=0;
    end;

    查找同时处理关系(以2取模为例)

    function sf(x:longint):longint;
    var
      fx:longint;
    begin
      if f[x]=x then exit(x)
      else begin
        fx:=sf(f[x]);
        r[x]:=(r[x]+r[f[x]]) mod 2;
        exit(fx);
      end;
    end;

    并查集合并

    procedure union(x,y,fx,fy,d:longint);
    begin
      f[fy]:=fx;
      r[fy]:=(2-r[y]+d+r[x]) mod 2;
    end;

    愿你出走半生,归来仍是少年

  • 相关阅读:
    【程序25】
    【程序24】
    【程序23】
    【程序22】
    【程序21】
    【程序20】
    【程序19】
    【程序18】
    string用法总结
    快速排序
  • 原文地址:https://www.cnblogs.com/forever97/p/3450037.html
Copyright © 2011-2022 走看看