求樹的重心(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