bob特別喜歡戰略遊戲,但有時他不能盡快找到最優解,所以他就很傷心。現在他又有乙個問題,他必須保衛乙個中世紀的城市,這個城市的道路形成了一棵樹。他需要在樹的節點上放最少的士兵來觀察所有的邊。你能幫助他麼?
例如下圖就只需要乙個士兵放在1號節點。
輸入檔案中有多組資料,每組資料的第一行n表示點的個數。接下來n行每行格式如下
x:(k) a1 a2 … ak(x為點的編號,k為與其相連的子節點個數,a1, a2, …, ak分別為子節點的編號)
對於每組資料輸出一行乙個數,即最少士兵數。
40:(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 100000using
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 這兩個答案其實...