危險計算機

2021-08-04 07:35:26 字數 1460 閱讀 7733

description

n臺計算機由n-1條網線連線,形成了乙個樹形網路。這些計算機經常會被黑客攻擊,如果這個樹形網路中的某一台計算機遭到攻擊而導致系統癱瘓,那麼與這台計算機連線的所有網線就無法進行資料傳輸,整個網路就會被分成若干個小的樹形網路,每個小網路由一台或多台計算機組成。如果一台計算機被攻擊後,形成的每個小網路中包含的計算機數都不超過n/2,那麼這台計算機就會成為重點攻擊物件,稱作「危險計算機」。給定乙個樹形網路,請你找出網路中所有的「危險計算機」。

input

第一行是乙個整數n(1≤n ≤20000),表示計算機的台數,計算機被編號為1..n。下面n-1行,每行包括兩個整數x, y,表示x和y這兩台計算機之間由一條網線連線。

output

包括若干行,每行為一台危險計算機的編號,按公升序排列。如果沒有危險計算機,就輸出一行,只包含乙個字串「none」(不包括引號)

sample input

10 1 2

2 3

3 4

4 5

6 7

7 8

8 9

9 10

3 8sample output3 8

hint

tree dp

題解

三倍經驗題之一(另外兩道請戳這裡和這裡)

非常簡單的tree dp

其實只要記錄乙個size陣列(記錄以每個節點為根的子樹的大小)即可

dfs一下搜,到乙個節點,列舉其子節點的大小和總大小減去當前節點大小的差即可

**

#include 

const

int maxn=20000;

int n,i,x,y,tot,fl;

int size[maxn+10],pre[maxn*2+10],now[maxn+10],son[maxn*2+10],list[maxn+10],z[maxn+10];

int f[maxn+10][2],g[maxn+10][2];

int dfs(int u,int fa)

dfs(son[j],u);

size[u]+=size[son[j]];

if (size[son[j]]>n/2)

j=pre[j];

}if (n-size[u]>n/2)

if (flag)

return size[u];

}int main()

dfs(1,0);

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

}if (!fl)

return

0;}

Problem 危險計算機

time limit 1 sec memory limit 128 mb n臺計算機由n 1條網線連線,形成了乙個樹形網路。這些計算機經常會被黑客攻擊,如果這個樹形網路中的某一台計算機遭到攻擊而導致系統癱瘓,那麼與這台計算機連線的所有網線就無法進行資料傳輸,整個網路就會被分成若干個小的樹形網路,每個...

Problem 危險計算機

time limit 1 sec memory limit 128 mb n臺計算機由n 1條網線連線,形成了乙個樹形網路。這些計算機經常會被黑客攻擊,如果這個樹形網路中的某一台計算機遭到攻擊而導致系統癱瘓,那麼與這台計算機連線的所有網線就無法進行資料傳輸,整個網路就會被分成若干個小的樹形網路,每個...

計算機 計算機基礎整理

大學四年浪費的代價。半夜整理東西 cpu 其功能主要是解釋計算機指令以及處理計算機軟體中的資料。cpu由運算器 控制器和暫存器及實現它們之間聯絡的資料 控制及狀態的匯流排構成。差不多所有的cpu的運作原理可分為四個階段 提取 fetch 解碼 decode 執行 execute 和寫回 writeb...