日常训练20161012 方块游戏

来源:互联网 发布:win10网络不稳定 编辑:程序博客网 时间:2024/05/21 22:26

裸的带权并查集,路径压缩地同时顺便把到根的dis也压缩一下。

const  MAXN=30050;var  f,dis,size:array[0..MAXN] of longint;  n,i,f1,f2,x,y:longint;  opt:char;function find(x:longint):longint;  var    k:longint;  begin    if (f[x]=x) then exit(x);    k:=find(f[x]);    dis[x]:=dis[f[x]]+dis[x];    f[x]:=k;    exit(k);  end;begin  assign(input,'cubes.in');reset(input);  assign(output,'cubes.out');rewrite(output);  readln(n);  for i:=1 to MAXN do f[i]:=i;  for i:=1 to MAXN do dis[i]:=0;  for i:=1 to MAXN do size[i]:=1;  for i:=1 to n do    begin      read(opt);      if opt='M'        then          begin            readln(x,y);            f1:=find(x);            f2:=find(y);            f[f1]:=f2;            dis[f1]:=size[f2];            size[f2]:=size[f2]+size[f1];          end        else          begin            readln(x);            find(x);            writeln(dis[x]);          end;    end;  close(input);close(output);end.
0 0