zoukankan      html  css  js  c++  java
  • POJ3107 (树的重心)

    const maxn=50008;
          INF=2000000000;
    type arr=record
            u,v,nt:longint;
            end;
         arr1=array[0..maxn] of longint;
    var eg:array[0..maxn*2] of arr;
        lt:array[0..maxn] of longint;
        flag:array[0..maxn] of boolean;
        son:array[0..maxn] of longint;
        ans:array[0..maxn] of longint;
        min,x,y,n,i,j,num:longint;
    procedure swap(var a,b:longint);
    var c:longint;
    begin
        c:=a; a:=b; b:=c;
    end;
    procedure sort(l,r:longint;var a:arr1);
    var i,j,x:longint;
    begin
        i:=l; j:=r; x:=a[(i+j) div 2];
        while i<=j do
        begin
            while a[i]<x do inc(i);
            while x<a[j] do dec(j);
            if i<=j then
            begin
                swap(a[i],a[j]);
                inc(i);
                dec(j);
            end;
        end;
        if l<j then sort(l,j,a);
        if i<r then sort(i,r,a);
    end;
    procedure add(u,v:longint);
    begin
        inc(j);
        eg[j].u:=u;
        eg[j].v:=v;
        eg[j].nt:=lt[u];
        lt[u]:=j;
    end;
    procedure dfs(u:longint);
    var i,v,tmp:longint;
    begin
        flag[u]:=true;
        son[u]:=0;
        i:=lt[u];
        tmp:=0;
        while i<>0 do
        begin
            v:=eg[i].v;
            if not flag[v] then
            begin
                dfs(v);
                son[u]:=son[u]+son[v]+1;
                if son[v]+1>tmp then tmp:=son[v]+1;
            end;    
            i:=eg[i].nt;
        end;
        if n-son[u]-1>tmp then tmp:=n-son[u]-1;
        if tmp=min then
        begin
            inc(num);
            ans[num]:=u;
        end else
        if tmp<min then
        begin
            min:=tmp;
            num:=1;
            ans[1]:=u;
        end;
    end;
    begin
        j:=0;
        readln(n);
        for i:=1 to n-1 do
        begin
            readln(x,y);
            add(x,y);
            add(y,x);
        end;
        min:=INF;
        dfs(1);
        sort(1,num,ans);
        for i:=1 to num do write(ans[i],' ');
    end.
  • 相关阅读:
    css 之优先策略
    SpringCloud WebUploader 分块上传
    SpringBoot WebUploader 分块上传
    java WebUploader 分块上传
    php WebUploader 分块上传
    jsp WebUploader 分块上传
    csharp WebUploader 分块上传
    c# WebUploader 分块上传
    .net WebUploader 分块上传
    c#.net WebUploader 分块上传
  • 原文地址:https://www.cnblogs.com/rpSebastian/p/4399320.html
Copyright © 2011-2022 走看看