time limit: 1 second
memory limit: 128 mb
【問題描述】
我們機房中了病毒,因此幾乎什麼都無法正常進入。為了解決這個病毒,我們花了好幾天。終於在大家的共同努力下,病毒不再猖狂了。
我們的機房的所有計算機組成了一棵樹,這是由於病毒,計算機無法兩兩完全連通的結果。所以,每台計算機能夠直接連通的是
它的孩子計算機和父親計算機。話說某天晚上,我們發現病毒絕跡了,但是我們無法確認是否真的消滅乾淨了。因此我們需要派
一些同學犧牲上課時間看守住所有的電腦兩個小時,以確認沒有任何病毒痕跡才能放心。我們當然想少耽誤同學們的學習時間。
因此我們需要找出一種方案,使所需要的看守人員最少。直接連通的兩台計算機只需要乙個人即可看守住。
【輸入格式】
輸入檔案中資料表示一棵樹,描述如下:
第一行 n,表示樹中結點的數目。
從第二行開始,每行描述每個結點資訊,依次為:該結點標號i,k(後面有k條邊與結點i相連),接下來k個數,分別是每條邊的
另乙個結點標號r1,r2,…,rk。
對於乙個n(1 < n <= 1500)個結點的樹,結點標號在0到n-1之間,在輸入檔案中每條邊只出現一次。
【輸出格式】
輸出資料只有一行,表示至少需要耽誤多少學生的學習時間。
【資料規模】
對於 100% 的資料,保證n≤1500。
sample input1
4 0 1 1
1 2 2 3
2 0
3 0sample output1
1 【樣例說明】
將一名同學放在1號位置即可看守住所有的計算機。
【題解】
設f1[x]表示x這個節點要放人並且x與它的子樹都已經被控制了;
設f2[x]表示x這個節點不放人並且x與它的子樹都已經被控制了;
設f3[x]表示x這個節點沒有被控制,但是x的子樹都被控制了;
以上f都表示所需要的最小人數;
這題的根節點是確定的->1號節點;
【**】
#include
#include
#include
const
int maxn = 1500 + 10;
using
namespace
std;
int n, f1[maxn] = , f2[maxn] = , f3[maxn] = ;
vector
a[maxn];
void tree_dp(int x, int fa)
if (!judge) //如果兒子全都選擇f2狀態則要加乙個最優的兒子節點監控它。
f2[x] += aa;
f1[x]++;//因為放了乙個節點所以遞增;
}int main()
}tree_dp(1, 0);
printf("%d\n", min(f1[1], f2[1]));//最後取根節點放或不放的最優值
return
0;
}
病毒茶几 U盤裡的惡魔 Autorun病毒
病毒茶几 u盤裡的惡魔 autorun病毒 simeon 聽見autorun病毒,你肯定不陌生了,它曾經幾次榮登病毒排行榜榜首,成為網際網路面臨重大威脅之一,眾多 杯具 是由它產生的,尤其是u盤上。我們常見到的是乙個autorun.inf和乙個exe檔案 見圖 這兩個檔案可是有歷史的啊。國內首例通過...
病毒茶几 U盤裡的惡魔 Autorun病毒
病毒茶几 u盤裡的惡魔 autorun病毒 simeon 聽見autorun病毒,你肯定不陌生了,它曾經幾次榮登病毒排行榜榜首,成為網際網路面臨重大威脅之一,眾多 杯具 是由它產生的,尤其是u盤上。我們常見到的是乙個autorun.inf和乙個exe檔案 見圖 這兩個檔案可是有歷史的啊。國內首例通過...
U盤病毒的清除
最近,身邊大部分人的機子都種了一種病毒 sal.xl e 會在磁碟右鍵選單中多出乙個auto選項 如圖 先不管這個病毒有什麼危害先,只要是病毒我們就要刪除 具體刪除辦法 1.alt shift del調出任務管理器,結束algssl.exe msfir80.exe msime80.exe這三個程序 ...