又想起了四月。
如果不是省選,大家大概不會這麼輕易地分道揚鑣吧? 只見乙個又乙個昔日的隊友離開了機房。
憑君莫話封侯事,一將功成萬骨枯。
夢裡,小\(f\)成了乙個給將軍送密信的信使。
現在,有兩封關乎國家生死的密信需要送到前線大將軍帳下,路途凶險,時間緊迫。小\(f\)不因為自己的禍福而避趨之,勇敢地承擔了這個任務。
不過,小\(f\)實在是太粗心了,他一不小心把兩封密信中的一封給弄掉了。
小\(f\)偷偷開啟了剩下的那封密信。他 發現一副十分詳細的地圖,以及幾句批文——原來 這是戰場周圍的情報地圖。他仔細看後發現,在這張地圖上標記了\(n\)個從 1 到\(n\)標號的 驛站,\(n−1\)條長度為1裡的小道,每條小道雙向連線兩個不同的驛站,並且驛站之間可以 通過小道兩兩可達。
小\(f\)仔細辨認著上面的批註,突然明白了丟失的信的內容了。原來,每個驛站都可以駐 扎乙個小隊,每個小隊可以控制距離不超過\(k\)裡的驛站。如果有驛站沒被控制,就容易產 生危險——因此這種情況應該完全避免。而那封丟失的密信裡,就裝著朝廷數學重臣留下的 精妙的排布方案,也就是用了最少的小隊來控制所有驛站。
小\(f\)知道,如果能計算出最優方案的話,也許他就能夠將功贖過,免於死罪。他找到了 你,你能幫幫他嗎? 當然,小\(f\) 在等待你的支援的過程中,也許已經從圖上觀察出了一些可能會比較有用的 性質,他會通過一種特殊的方式告訴你。
從標準輸入中讀入資料。
輸入第 1 行乙個正整數\(n,k,t\),代表驛站數,一支小隊能夠控制的最遠距離,以及特殊性質所代表的編號。關於特殊性質請參照資料範圍。
輸入第 2 行至第\(n\)行,每行兩個正整數\(u_i,v_i\),表示在\(u_i\)和\(v_i\)間,有一條長度為 一里的小道。
輸出到標準輸出中。
輸出一行,為最優方案下需要的小隊數。
子任務會給出部分測試資料的特點。如果你在解決題目中遇到了困難,可以嘗試只解 決一部分測試資料。
關於 t 的含義如下: t = 0:該測試點沒有額外的特殊性質; t = 1:保證最多 8 個點的所連線的小道超過 1 條; t = 2:保證所有點到 1 號點的距離不超過 2。
每個測試點的資料規模及特點如下表
貪心策略:自下向上做,當乙個點不得不需要照看的時候,進行照看。
實現:在\(dfs\)過程中,每次從子節點接受乙個值\(x\)
當\(x>0\)時,代表當前節點存在至少乙個比它低\(x-1\)的節點需要照看
當\(x<=0\)時,代表當前節點還可以覆蓋離它距離不超過\(-x\)的點
對每個節點找到最大正值和最小非負值,看看能否用負的照看正的。
複雜度:\(o(n)\)
code:
#include const int n=100010;
int head[n],to[n<<1],next[n<<1],cnt;
void add(int u,int v)
int n,used[n],ans=0,k,t;
void init()
int main()
2018.7.11 P3942 將軍令 貪心
鏈結 不斷從深度最大的節點的k kk級父節點進行擴充套件 注意擴充套件時使用 dfs dfsdf s,因為 bfs bfsbf s 儲存上乙個經過的節點較麻煩 中有bfs bfsbf s 函式,僅供參考,由於回環往復地入隊,tle tletl e 不可避免,include define reg re...
P3942 將軍令 貪心
鏈結 不斷從深度最大的節點的k k級父節點進行擴充套件 注意擴充套件時使用 dfs dfs,因為 bfs bfs 儲存上乙個經過的節點較麻煩 中有bfs bfs 函式,僅供參考,由於回環往復地入隊,tle tle 不可避免,include define reg register intread wh...
貪心 洛谷3942將軍令
貪心 好 如果某個點沒被控制,我們當然選擇在他的第k的祖先 建站,這也就是貪心的思路。這個 某個點 我們肯定要從深度最大的點開始。所以說,先bfs一遍,bfs完的佇列就是按深度從小到大排序的了,我們從最後開始往前面迴圈,對於沒有被控制的點,ans,找出他的第k個祖先,然後dfs他的第k個祖先,向所有...