zoukankan      html  css  js  c++  java
  • poj 1797

    2013-09-08 09:48

    最大生成树,输出生成树中最短的边儿即可

    或者对边儿排序,二份答案+BFS判断是否1连通N

    时间复杂度都是O(NlogN)的

    附最大生成树pascal代码

    //By BLADEVIL
    var
        m, n, t         :longint;
        pre, other, len :array[0..101000] of longint;
        father          :array[0..100100] of longint;
        i               :longint;
     
    procedure init;
    var
        i               :longint;
        x, y, z         :longint;
    begin
        read(n,m);
        for i:=1 to m do
        begin
            read(x,y,z);
            pre[i]:=x;
            other[i]:=y;
            len[i]:=z;
        end;
        for i:=1 to n do father[i]:=i;
    end;
     
    procedure qs(low,high:longint);
    var
        i, j, x, z      :longint;
    begin
        i:=low; j:=high; x:=len[(i+j) div 2];
        while i<j do
        begin
            while x>len[j] do dec(j);
            while x<len[i] do inc(i);
            if i<=j then
            begin
                z:=len[i]; len[i]:=len[j]; len[j]:=z;
                z:=pre[i]; pre[i]:=pre[j]; pre[j]:=z;
                z:=other[i]; other[i]:=other[j]; other[j]:=z;
                inc(i); dec(j);
            end;
        end;
        if i<high then qs(i,high);
        if j>low then qs(low,j);
    end;
     
    function getfather(x:longint):longint;
    begin
        if father[x]=x then exit(x);
        father[x]:=getfather(father[x]);
        exit(father[x]);
    end;
     
    procedure main;
    var
        j               :longint;
        a, b            :longint;
    begin
        init;
        qs(1,m);
        for j:=1 to m do
        begin
            a:=getfather(pre[j]);
            b:=getfather(other[j]);
            if a<>b then father[b]:=a;
            a:=getfather(1);
            b:=getfather(n);
            if a=b then
            begin
                writeln('Scenario #',i,':');
                writeln(len[j]);
                writeln;
                exit;
            end;
        end;
    end;
     
    begin
        read(t);
        for i:=1 to t do main;
    end.
    

      

  • 相关阅读:
    (五)表单类的创建和使用
    (四)注册登录--重用Django
    (三)Django模板语言
    (二)Django模板的应用
    (一)Django项目架构介绍
    SOA测试之浏览器插件
    (2) Tomcat启动Jenkins
    (1) Jenkins + Subversion + Maven + TestNG
    [翻译] API测试最佳实践
    [原创] 算法之递归(4)- 应用
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3433477.html
Copyright © 2011-2022 走看看