五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

[基礎算法6] 樹的重心

2023-07-11 23:08 作者:喵雕沙  | 我要投稿

題目描述

題目描述:
? ? ? 給定一顆樹,樹中包含N個結(jié)點(編號從1-N),和N- 1 條無向邊。請你找到樹的重心,并輸出 將重心刪除后,剩余各個連通塊中點數(shù)的最大值。
? ? ? 重心定義:重心是指樹中的一個結(jié)點,如果將這個點刪除后,剩余各個連通塊中點數(shù)的最大值最小,那么這個結(jié)點被 稱為樹的重心。
輸入格式:??
? ? ?第一行包含整數(shù)N,表示 樹的結(jié)點數(shù),1<=N<=1e5 ,接下來N-1行,每行包含兩個整數(shù)a和b,表示 a和b之 間存在一條邊。
輸出格式:
? ? ?輸出一個整數(shù) N,表示 將重心刪除后,剩余各個連通塊中點數(shù)的最大值。




樣例輸入?復制

9 1 4 1 2 2 6 2 5 6 3 6 7 7 9 7 8

樣例輸出?復制

4

來源/分類

樹DP


程序:

#include <iostream>
using namespace std;
const int N=1e5+10;
bool vis[N];
int E[2*N],ne[2*N],h[N],id,ans=0x3f3f3f3f,n;
?
int dfs(int u)
{
????vis[u]=true;//標記u這個點被搜過
????int size=0;//記錄u的最大子樹的結(jié)點數(shù)
????int sum=1;//記錄以u為根的子樹的結(jié)點數(shù)
????for(int i=h[u];i!=0;i=ne[i])//i是邊的編號
????{
????????int j=E[i];//j是u的鄰接點
????????if(vis[j])
????????????continue;//避免向上查找
????????int s=dfs(j);//s是以j為根的子樹的結(jié)點數(shù)
????????size=max(size,s);//記錄u的最大子樹的結(jié)點數(shù)
????????sum+=s;//累加u的各個子樹的結(jié)點數(shù)
????}
????ans=min(ans,max(size,n-sum));//更新答案
????return sum;//返回以u為根的子樹的結(jié)點數(shù)
}
?
void add(int x,int y)//鄰接表
{
????E[++id]=y;
????ne[id]=h[x];
????h[x]=id;
}//加邊
?
int main()
{
????cin>>n;
????for(int i=1;i<=n;i++)
????{
????????int x,y;
????????cin>>x>>y;
????????add(x,y);
????????add(y,x);//建圖
????}
????dfs(1);
????cout<<ans<<endl;
????return 0;
}



[基礎算法6] 樹的重心的評論 (共 條)

分享到微博請遵守國家法律
元朗区| 和硕县| 闻喜县| 和田市| 通河县| 邳州市| 抚顺县| 宁明县| 塔城市| 枣强县| 溧水县| 曲周县| 依安县| 阿瓦提县| 天津市| 太仓市| 互助| 甘孜| 永靖县| 温泉县| 安平县| 阳原县| 大安市| 绥中县| 无极县| 侯马市| 桃园市| 宜良县| 册亨县| 蓝山县| 邵阳市| 宁德市| 阜康市| 米林县| 新宁县| 龙井市| 临湘市| 蒙阴县| 新巴尔虎左旗| 桂平市| 武川县|