POJ 3107樹的重心

2022-08-19 20:39:11 字數 967 閱讀 6040

題意:找樹的重心。。定義就是以重心為根的所有子樹裡面最大的最小。。。

做法:瞎dfs一下就行了。。記錄一下子樹。。

重點:!!!!這個題vector暴力存邊並不行。。。。水了這麼多水題第一次被卡了。該來的總還是會來。。所以用鏈式向前星來模擬鄰接表。。比vector速度快的很多,也不難寫。。。

**:

#include#include#include#include#includeusing namespace std;

const int max=50005;

int vis[max];

int low[max];

int mlow[max];

int n;

int r[max];

struct enode[max*2];

int head[max];

int num=0;

void add(int from,int to)

void init()

int dfs(int x)

t=node[t].next;

}low[x]=ret;

return ret;

}void dfs2(int x)

t=node[t].next;

}t=head[x];

while(t!=-1)

t=node[t].next;

}mlow[x]=ret;

return;

}int main()

dfs(1);

memset(vis,0,sizeof(vis));

dfs2(1);

int mi=n;

int cnt=0;

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

else if(mlow[i]==mi)

}sort(r,r+cnt);

for(int i=0;i}

}

poj3107(樹的重心)

求樹的重心。樹的重心是指去掉重心之後剩下的子樹的最大結點個數最少 樹形dp,dp i 表示以i為重心,剩下的子樹的最大結點個數,狀態轉移dp i max dp i siz j 注意用vector超時。如下 include include include include include include...

POJ 3107樹的重心

題意 找樹的重心。定義就是以重心為根的所有子樹裡面最大的最小。做法 瞎dfs一下就行了。記錄一下子樹。重點 這個題vector暴力存邊並不行。水了這麼多水題第一次被卡了。該來的總還是會來。所以用鏈式向前星來模擬鄰接表。比vector速度快的很多,也不難寫。include include includ...

樹的重心求法POJ3107

題目的意思很明確,就是求所有樹的重心 再按字典序輸出 樹是很常見的資料結構,樹的重心在樹的分治中非常有用,所以對於大規模的樹快速求出重心省節時間是乙個oi選手需要考慮的問題。那麼我們先介紹一下樹的重心。樹的重心定義為 樹中的乙個點,刪掉該點,使剩下的樹所構成的森林中最大的子樹節點數最少。樹的重心推論...