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...