BZOJ4813 Cqoi2017 小Q的棋盤

2022-05-19 20:17:46 字數 777 閱讀 6740

給出一棵樹,從根節點出發,走n步,求最多能經過多少個點(重複經過不算)

貪心本來想著樹形dp,太麻煩了,懶得碼

首先我們把最長鏈留到最後走,這樣子我們就可以一次性將最長鏈走完了,那麼最長鏈的每條邊的代價就是1

而其它邊的代價就為2(因為要往回走),然後貪心就好了

特殊情況:

1.最長鏈的長度》=步數,直接輸出步數

2.步數足夠將整張圖走完,直接輸出n

直接在貪心的時候順便處理就好了

#include#include

#include

#include

#include

using

namespace

std;

struct

node

a[210];int len,last[110

];void ins(int x,int

y)int dep[110

];void dfs(int x,int

fa) }

}int

main()

memset(dep,

0,sizeof

(dep));

dfs(

1,1);

int ans=min(dep[1],n)+1

; n-=ans-1

;

while(ans=2)

printf(

"%d\n

",ans);

return0;

}

BZOJ4813 Cqoi2017 小Q的棋盤

找以起點為起點的乙個最長鏈,最優一定是在最長鏈上不走回頭路的,所以相當於最長鏈上的邊代價是1,非最長鏈的邊代價是2 因為要走回去 每付出一次代價就可以使訪問到的點數 1,那麼貪心即可 include include include include include include include in...

bzoj4813 Cqoi2017 小Q的棋盤

小q正在設計一種棋類遊戲。在小q設計的遊戲中,棋子可以放在棋盤上的格點中。某些格點之間有連線,棋子只能在有連線的格點之間移動。整個棋盤上共有v個格點,編號為0,1,2 v 1,它們是連通的,也就是說棋子從任意格點出發,總能到達所有的格點。小q在設計棋盤時,還保證棋子從乙個格點移動到另外任一格點的路徑...

bzoj4813 樹形dp 小Q的棋盤

description 小q正在設計一種棋類遊戲。在小q設計的遊戲中,棋子可以放在棋盤上的格點中。某些格點之間有連線,棋子只能 在有連線的格點之間移動。整個棋盤上共有v個格點,編號為0,1,2 v 1,它們是連通的,也就是說棋子從任意格 點出發,總能到達所有的格點。小q在設計棋盤時,還保證棋子從乙個...