MZOJ 1063 士兵守衛

2022-08-12 21:18:24 字數 1074 閱讀 6783

bob特別喜歡戰略遊戲,但有時他不能盡快找到最優解,所以他就很傷心。現在他又有乙個問題,他必須保衛乙個中世紀的城市,這個城市的道路形成了一棵樹。他需要在樹的節點上放最少的士兵來觀察所有的邊。你能幫助他麼?

例如下圖就只需要乙個士兵放在1號節點。

輸入檔案中有多組資料,每組資料的第一行n表示點的個數。接下來n行每行格式如下

x:(k) a1 a2 … ak(x為點的編號,k為與其相連的子節點個數,a1, a2, …, ak分別為子節點的編號)

對於每組資料輸出一行乙個數,即最少士兵數。

4

0:(1) 1

1:(2) 2 3

2:(0)

3:(0)

53:(3) 1 4 2

1:(1) 0

2:(0)

0:(0)

4:(0)

1

2

這道題難在讀入,最主要是又要輸入冒號 「:」 又要輸入括號「()」。

其實scanf可以輕鬆解決問題,scanf("%d:(%d)",&x,&m)即可,scanf明白你的意思,不用用其他花裡胡哨的操作;

剩下的與戰略遊戲完全一致了,詳見mzoj 1127 && luogu p2016 戰略遊戲

#include#define maxn 100000

using

namespace

std;

int k=0

,head[maxn];

int f[maxn][2

];int ans=0

;struct

nodee[maxn

<<1

];void adde(int u,int

v) void dp(int u,int

fa)}

void

init()

void

readdata()

}dp(

0,-1

); printf(

"%d\n

",min(f[0][1],f[0][0

]));

}}int

main()

MZOJ 2018 03 31 考試隨想

第一道題,先是題看錯了,貪心的時候沒有貪心對,改了1mol,最後才改對,預計正常用時20min。1 include2 include3 include4 include5 include6 using namespace std 78 const int maxn 10000 10 9 const ...

模擬106 題解

顯然的區間dp。斷環成鏈,預處理出每個連續區間集合的元素個數。然後直接dp就完了。想了一些簡單的貪心,然後都偽了。所以考慮如何暴力 o n 2 來做這個題。列舉最終用來跳最後一步的藥丸,顯然前面的藥丸可以按 a i b i 排序。然後考慮如何優化這個過程,問題在於如何判斷溺水的情況。溺水的情況只出現...

10 6 拓撲排序

拓撲排序的重要應用 判斷乙個給定的圖是否是 有向無環 圖 這道題也沒啥好說的,就是注意一點 用queue結果wa了,樣例結果是0 3 1 2,題目中說 請按照題目描述中的演算法依次輸出圖的拓撲有序序列 題中用的是stack,所以將queue改為stack後ac,樣例結果3 0 1 2 這兩個答案其實...