1. 程式人生 > >求樹的重心(POJ1655)

求樹的重心(POJ1655)

題意:給出一顆n(n<=2000)個結點的樹,刪除其中的一個結點,會形成一棵樹,或者多棵樹,定義刪除任意一個結點的平衡度為最大的那棵樹的結點個數,問刪除哪個結點後,可以讓平衡度最小,即求樹的重心:

定義num陣列記錄以當前結點為根的子樹元素個數,ans陣列記錄刪除該節點後的平衡度

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"algorithm"
#include"iostream"
#define M 20009
using namespace std;
struct node
{
     int u,v,next;
}edge[M*2];
int t,num[M],head[M],ans[M],n;
void init()
{
     t=0;
     memset(head,-1,sizeof(head));
}
void add(int u,int v)
{
     edge[t].u=u;
     edge[t].v=v;
     edge[t].next=head[u];
     head[u]=t++;
}
void dfs(int u,int f)
{
     num[u]=1;
     ans[u]=0;
     for(int i=head[u];i!=-1;i=edge[i].next)
     {
          int v=edge[i].v;
          if(v==f)continue;
          dfs(v,u);
          num[u]+=num[v];
          ans[u]=max(ans[u],num[v]);
          ans[v]=max(ans[v],n-num[v]);
     }
}
int main()
{
     int T,i;
     scanf("%d",&T);
     while(T--)
     {
          scanf("%d",&n);
          init();
          for(i=1;i<n;i++)
          {
               int a,b;
               scanf("%d%d",&a,&b);
               add(a,b);
               add(b,a);
          }
          dfs(1,-1);
          int id=1;
          for(i=1;i<=n;i++)
               if(ans[id]>ans[i])
                    id=i;
          printf("%d %d\n",id,ans[id]);
     }
}


相關推薦

重心POJ1655

題意:給出一顆n(n<=2000)個結點的樹,刪除其中的一個結點,會形成一棵樹,或者多棵樹,定義刪除任意一個結點的平衡度為最大的那棵樹的結點個數,問刪除哪個結點後,可以讓平衡度最小,即求樹的重心

講解2——的輸入,重心,直徑

str 樹的直徑 names n) ostream push main define span one.樹的輸入 1.輸入每個節點父親節點的編號 #include<vector> #include<stdio.h> #include<

hdu1115 Lifting the Stone幾何,多邊形重心模板題

class str math i++ clu pull area this net 轉載請註明出處:http://blog.csdn.net/u012860063 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1115

線段、掃描線、離散化面積並hdu1542

題目連結: https://vjudge.net/problem/HDU-1542 大牛部落格連結:http://blog.csdn.net/u013480600/article/details/22548393 講解的很生動。 分析: 首先我們將矩形

講解6——讓我們異或吧

!= 情侶 rst back cst getch 能夠 代碼 st表 洛谷——P2420 讓我們異或吧 題目描述 異或是一種神奇的運算,大部分人把它總結成不進位加法. 在生活中…xor運算也很常見。比如,對於一個問題的回答,是為1

講解7——沒有上司的舞會

一個 哪些 們的 一定的 如果 參加 大學 增加 計算 題目描述 某大學有N個職員,編號為1~N。他們之間有從屬關系,也就是說他們的關系就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來一個職員都會增加一定的快樂指數Ri,但是呢,如

雪飲者 決策系列決策應用

ssi 字符串長度 mes pla 選擇 font com vector nac   本篇以信息增益最大作為最優化策略來詳細介紹決策樹的決策流程。   首先給定數據集,見下圖    註:本數據來源於網絡 本篇將以這些數據作為訓練數據(雖然少,但足以介紹清楚原理!),下圖是決

Lambda表達式解析

equal arguments provider inf gets 轉換 lis bin text 概述   前面章節,總結了Lambda樹的構建,那麽怎麽解析Lambda表達式樹那?Lambda表達式是一種委托構造而成,如果能夠清晰的解析Lambda表達式樹,那麽就能夠

線段模版

odi d+ space track build clu urn ffffff rac //=========================================== //segment tree //final version //by kevin_sam

關於論【動態問題LCT

spa cnblogs 註定 ont ++ 方法 scanf tree edge 搬運:看一道caioj1439 題目描述 一開始給你一棵n個點n-1條邊的樹,每個點有一個權值wi。 三種操作: op=1 u v :在點u和點v之間建一條邊。 op=2 u v:摧毀點

【模板】前向星 SPFA最短

代碼 poj ostream name 兩個 col spfa ron esp 之前一個改自別人的模板竟然在一道題上TLE了,而代碼也實在醜陋,網上找得到的模板也大多跑得慢(vector存圖)或代碼醜陋、殘疾(無初始化函數的模板能叫模板嗎?),索性自己重新寫了一個。 題是P

【深入理解Java集合框架】紅黑講解

時間復雜度 row lee tel framework 關系 eight logs return 來源:史上最清晰的紅黑樹講解(上) - CarpenterLee 作者:CarpenterLee(轉載已獲得作者許可,如需轉載請與原作者聯系) 文中所有圖片點擊之後均可查看大

線段初步1

建立 命令 ase img rom div roman 字符串 當我 蒟蒻終於要開始好好學線段樹了…… 線段樹是一種二叉樹形結構(二叉搜索樹),屬於平衡樹的一種。它將線段區間組織成樹形的結構,並用每個節點來表示一條線段[a,b]。每個節點的左右兒子線段分別是該線段的左半[a

線段初步3

影響 描述 rep pac span int 進行 說明 urn 今天我們學習掃描線。掃描線大多數時候用於計算矩形面積,那我們如何處理有重合的情況呢? 我們想象有一條線從下向上掃描,之後每次掃描的時候,你可以計算一下當前在線上有多長的區間被覆蓋,我們相當於把矩形轉化為無數小

Codeforces Round #485 (Div. 2) C題三元組思維

rip ORC 它的 printf ble CA BE byte order C. Three displays time limit per test 1 second memory limit per test 256 megabytes input s

文件壓縮——哈夫曼編碼

結構體 splay 空間 構建 葉子 ESS rate char 底層 何謂哈夫曼樹?——   百度百科:給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短

OptimalSolution(2)--二叉問題4與拓撲結構

kmp ole 結點 mp算法 返回 str 序列 || 開始   一、判斷t1樹是否包含t2樹全部的拓撲結構 1 / 2 3 2 / \ /

用dfs聯通塊UVa572

一個 urn 標記 連通 spa dfs ios mes max 一、題目 輸入一個m行n列的字符矩陣,統計字符“@”組成多少個八連塊。如果兩個字符所在的格子相鄰(橫、豎、或者對角線方向),就說它們屬於同一個八連塊。 二、解題思路 和前面的二叉樹遍歷類似,圖也有DFS和BF

平衡二叉搜尋實現go

/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func sorted

ROS行為實現Python

一、行為樹   行為樹是一種控制結構,在相關論文資料中通常會與有限狀態機進行比較,並認為其比有限狀態機更適合複雜條件下的控制,目前多用於遊戲開發中(主要用於NPC行為),工業領域的應用研究正逐漸增多,主要面向移動機器人/AGV/無人駕駛等等。   相關論文資料可以參考:http://kth.diva-po