PAT 1021 樹的最深根

2021-10-22 14:31:10 字數 1308 閱讀 1641

題目分析:

關鍵在於搞清楚乙個基本情況:

隨便選乙個節點作為根節點,其各個子樹的深度中最大的兩個就組成了這個樹的最大深度。

因此我們最簡單的思路就是對樹的每個子樹進行一次求深度操作,同時記錄最深根,然後找最深的兩個子樹就可以了。這樣至少要對所有子樹各進行一次操作。

可以更加簡潔,我們先對整個樹進行一次求深度操作,這個時候我們求出來的所有最深點所在的子樹都被遍歷完了。

假如這些點分別屬於不同的子樹,那麼肯定就已經確定了所有的點;

這樣的話我們把兩種情況統一處理,在第一次求深度確定的點中隨便找乙個點作為根節點再次進行深搜,確定的新點要麼和原來一樣,要麼全是新點,把兩個集合取並集(去重)即可。

**:

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

10050

;int n;

vector<

int> m[maxn]

;int vis1[maxn]

,vis2[maxn]

;vector<

int> res1,res2;

int max1 =0;

void

dfs1

(int root)}}

void

dfs2

(int root,

int pos)

}// 假如是葉節點if(

!***)

else

if(pos == max1)}}

intmain()

int cnt =0;

for(

int i =

1;i <= n;i++)}

if(cnt!=

1) cout<<

"error: "

<" components"

}}

55ms

c++ set給vector去重並自動排序

set自帶去重和排序功能:

vector<

int> v;

set<

int>

s(v.

begin()

,v.end()

);

這題用鄰接矩陣會爆記憶體

個位數統計pat 1021

給定乙個k位整數n dk 1 10k 1 d1 101 d0 0 di 9,i 0,k 1,dk 1 0 請編寫程式統計每種不同的個位數字出現的次數。例如 給定n 100311,則有2個0,3個1,和1個3。輸入格式 每個輸入包含1個測試用例,即乙個不超過1000位的正整數n。輸出格式 對n中每一種...

PAT1021 個位數統計

時間限制 100 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 給定乙個k位整數n dk 1 10k 1 d1 101 d0 0 di 9,i 0,k 1,dk 1 0 請編寫程式統計每種不同的個位數字出現的次數。例如 給定n 100...

PAT 1021 個位數統計

給定乙個k位整數n dk 1 10k 1 d1 101 d0 0 di 9,i 0,k 1,dk 1 0 請編寫程式統計每種不同的個位數字出現的次數。例如 給定n 100311,則有2個0,3個1,和1個3。輸入格式 每個輸入包含1個測試用例,即乙個不超過1000位的正整數n。輸出格式 對n中每一種...