1. 程式人生 > >POJ 3107 求樹的重心

POJ 3107 求樹的重心

題意:求出樹的所有重心編號,從小到大排序輸出

#include<cstring>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<list>
#include<stack>
#include<climits>
#include<cctype> #include<bitset> #include<set> #include<sstream> #include<climits> using namespace std; #define mod 1000000007 #define PI acos(-1.0) #define INF 0x3f3f3f3f typedef long long LL; typedef unsigned long long ULL; const int maxn=50005; struct edge{ int to,next; }E[maxn<<1
]; int n,tol,num; int son[maxn]; int head[maxn]; bool vis[maxn]; int ans[maxn]; int siz; void init(){ siz=INF; tol=0; memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head)); memset(son,0,sizeof(son)); } void add(int u,int v){ E[tol].to=v; E[tol].next=head[u]; head[u]=tol++; } void
dfs(int u){ vis[u]=1; son[u]=0; int tmp=0; for(int i=head[u];i!=-1;i=E[i].next){ int to=E[i].to; if(!vis[to]){ dfs(to); son[u]+=son[to]+1; tmp=max(tmp,son[to]+1); } } tmp=max(tmp,n-son[u]-1); if(tmp<siz){ num=0; siz=tmp; ans[num++]=u; } else if(tmp==siz){ ans[num++]=u; } } int main() { while(~scanf("%d",&n)){ init(); for(int i=1;i<=n-1;i++){ int u,v; scanf("%d%d",&u,&v); add(u,v); add(v,u); } dfs(1); sort(ans,ans+num); printf("%d",ans[0]); for(int i=1;i<num;i++){ printf(" %d",ans[i]); } printf("\n"); } return 0; }

相關推薦

POJ 3107 重心

題意:求出樹的所有重心編號,從小到大排序輸出 #include<cstring> #include<string> #include<cstdio> #includ

POJ 3107 Godfather (重心模板題)

題意:給出一棵樹,求出所有樹的重心,並且按編號從小到大輸出。 直接套模板即可。 程式碼如下: #include<iostream> #include<cstdio> #inc

poj 3107 Godfather(重心)

dfs求樹的重心。 然後記得用前向星,用vector會t。 然後就是又是慣例的poj過量測試,陣列開大一點。 程式碼: #include <iostream> #include &l

POJ 1655 +POJ 3107重心

樹的重心:樹的重心也叫樹的質心。找到一個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹儘可能平衡。 換句話說,刪除這個點後最大連通塊(一定是樹)的結點數最

重心 POJ 1655、POJ 3107 樹形DP

樹的重心:在樹中刪去重心後,剩下的子樹的最大子樹大小最小,則這個節點為重心 POJ 1655:直接求樹的重心 思路:遞迴每個節點的時候,記錄一下這個節點所有子樹的大小和,然後記錄最大子樹的大小,維護

POJ 1655 BalanceAct 3107 Godfather (重心)(樹形DP)

hide 可能 scan href == tail cstring get lap 參考網址:http://blog.csdn.net/acdreamers/article/details/16905653 樹的重心的定義: 樹的重心也叫樹的質心。找到一個點,其所有的

POJ 3107 Godfather(重心

Last years Chicago was full of gangster fights and strange murders. The chief of the police got really tired of all these crimes, and decided to arres

POJ 3107 】Godfather 【重心

Language: Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7652 Accepted: 2701 Description Last y

poj 2104主席區間第k小

區間 ++ cto ast http lan air algorithm while POJ - 2104 題意:求區間第k小 思路:無修改主席樹 AC代碼: #include "iostream" #include "iomanip" #include "string.

Godfather(POJ3107)——重心(遞歸)

space ble 子節點 sta target log targe ios struct 先貼上原題的鏈接 ?傳送門? 題目大意是給定一個無根樹,使得去掉一個點之後,剩下子樹的節點數的最大值最小,也就是求樹的重心。求樹的重心的話,只需要設一個點為跟,然後遞歸下去,求出

POJ3107Godfather(重心裸題)

i++ got cte tun set can contains ctu fort Last years Chicago was full of gangster fights and strange murders. The chief of the police g

重心

font struct target printf 樹的點分治 size 復雜度 編號 鏈接 給定一棵樹,求樹的重心的編號以及重心刪除後得到的最大子樹的節點個數size,如果size相同就選取編號最小的. 首先要知道什麽是樹的重心,樹的重心定義為:找到一個點,其所有的子樹

Buy Tickets POJ - 2828線段插隊

題意就是給你n個人,每個人有自己的要插入的pos和val,問你最後的排序 思路:逆序插入,最後一個人的位置一定是固定的,因為必須連續插入,所以第i個人插入的時候必須保證前面有pos[i]個空位, 那麼用線段樹記錄位置個數,如果位置不夠,就往後挪。 #include<iostream>

POJ 3264 線段區間最大最小值

很裸的線段樹,沒有什麼好說的,我把根節點所擁有的左右區間都寫在結構體裡面,這樣傳參的時候比較方便。 POJ不支援萬能頭很不習慣。 #include<iostream> #include<cstdio> using namespace std; const int

POJ 3067 Japan 狀陣列逆序數

可以發現規律,用樹狀陣列,求逆序數之和,累加sum(MAXN)-sum(nodes[i].x); Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for

重心(POJ1655)

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

主席入門詳解一(學習筆記)(例題POJ-2104 區間第k小)

學習主席樹,在網上搜了很多教程(都好簡短啊,直接就是幾行字就上程式碼,看不懂啊有木有~~),最後才很艱難的學會了最基礎的部分。下面就是我在學習的過程中的產生的疑惑和解決的辦法。 學習主席樹需要的前置技能:線段樹。 參考資料 1. B站上的視訊講解(話說B站真的啥都有啊)

POJ 1741 Tree, 重心, 分治, 點分治

最近在學習樹的分治,算是比較難,而且程式碼量比較大的一塊。隨便拿一道題來就有上百行,故寫一篇文章來總結一下這方面的框架。 POJ這一題應該算是樹分治的入門題,順便用這一題來詳細說明樹分治的一些具體內容。 Tree Time Limit: 1000MS Memory

POJ3107 Godfather 重心

題目大意:求樹的重心,如果有多個節點,按節點編號升序輸出所有的。 分析:用vector儲存圖會TLE,這裡用了前向星儲存圖,用set來記錄節點可以省去排序(set是一顆二叉樹,自動把加入的點按升序排列了)。 實現程式碼如下: #include <stdio.h

POJ 3107 Godfather(樹形DP(找重心))

任重而道遠 Description Last years Chicago was full of gangster fights and strange murders. The chief of the police got really tired of all th