zoukankan      html  css  js  c++  java
  • NOIP2010 关押罪犯 (并查集)

    若x,y有关系 将x与y的补集, y与x的补集建立关系 

    const maxn=20008;
          maxm=100008;
    var eg:array[0..maxm,1..3] of longint;
        f:array[0..maxn*2] of longint;
        i,j,m,n,x,y,z:longint;
    procedure swap(var a,b:longint);
    var c:longint;
    begin
        c:=a;a:=b;b:=c;
    end;
    function find(x:longint):longint;
    begin
        if f[x]=x then exit(x);
        f[x]:=find(f[x]);
        exit(f[x]);
    end;
    procedure sort(l,r:longint);
    var i,j,x:longint;
    begin
        i:=l; j:=r;
        x:=eg[(l+r) div 2,3];
        while i<=j do
        begin
            while eg[i,3]>x do inc(i);
            while x>eg[j,3] do dec(j);
            if i<=j then
            begin
                swap(eg[i,1],eg[j,1]);
                swap(eg[i,2],eg[j,2]);
                swap(eg[i,3],eg[j,3]);
                inc(i);
                dec(j);
            end;
        end;
        if i<r then sort(i,r);
        if l<j then sort(l,j);
    end;
    begin
        readln(n,m);
        for i:=1 to m do read(eg[i,1],eg[i,2],eg[i,3]);
        for i:=1 to n*2 do f[i]:=i;
        sort(1,m);
        for i:=1 to m do
        begin
            x:=find(eg[i,1]);
            y:=find(eg[i,2]);
            if x=y then
            begin
                writeln(eg[i,3]);
                exit;
            end;
            f[x]:=find(eg[i,2]+n);
            f[y]:=find(eg[i,1]+n);
        end;
        writeln(0);
    end.
  • 相关阅读:
    模板方法模式
    备忘录模式
    观察者模式
    中介者模式
    迭代器模式
    Char型和string型字符串比较整理
    命令模式
    责任链模式
    代理模式
    dokcer 杂谈
  • 原文地址:https://www.cnblogs.com/rpSebastian/p/4285994.html
Copyright © 2011-2022 走看看