SGU 134 Centroid 樹的重心

2021-06-23 01:08:56 字數 733 閱讀 5208

題意:給出一棵樹求樹的重心,輸出兩行,第一行為重心的子樹的最大節點數,重心的個數,第二行按照公升序給出重心的編號

#include #include #include using namespace std;

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

const int n=20010;

struct edge

edge[n<<1];

int head[n],e,dp[n]; //所有子樹中節點數的最大值,不含自身

int n,son[n]; //以每個節點為根的子樹的節點數,包含自身

void add (int u,int v)

; edge[e] = e;

head[u] = e++;

}void dfs (int u, int pre)

dp[u]=max(dp[u],n-son[u]);

}int main ()

else if (minnum == dp[i])

cnt++;

printf("%d %d\n",minnum,cnt);

for (i=1;i<=n;i++)

if (dp[i] == minnum)

printf("%d ",i);

return 0;

}

樹形DP求樹的重心 SGU 134

令乙個點的屬性值為 去除這個點以及與這個點相連的所有邊後得到的連通分量的節點數的最大值。則樹的重心定義為 乙個點,這個點的屬性值在所有點中是最小的。sgu 134 即要找出所有的重心,並且找出重心的屬性值。考慮用樹形dp。dp u 表示割去u點,得到的連通分支的節點數的最大值。tot u 記錄以u為...

樹形DP求樹的重心 SGU 134

令乙個點的屬性值為 去除這個點以及與這個點相連的所有邊後得到的連通分量的節點數的最大值。則樹的重心定義為 乙個點,這個點的屬性值在所有點中是最小的。sgu 134 即要找出所有的重心,並且找出重心的屬性值。考慮用樹形dp。dp u 表示割去u點,得到的連通分支的節點數的最大值。tot u 記錄以u為...

SGU155 笛卡爾樹的構造

分類 資料結構 2013 09 07 20 12 300人閱讀收藏 舉報題目 題意 給出每個點的兩個值key和fix,且所有的key值和fix值都是不相同的,要求構造出笛卡爾樹。輸入每個點的兩個權 值,輸出笛卡爾樹每個結點 按照輸入的順序編號 的父親結點和兩個兒子的編號。分析 首先,笛卡爾樹對於ke...