小Q的棋盤 貪心

2021-08-28 12:49:29 字數 1118 閱讀 4969

洛谷傳送門

顯然這是一棵樹(這個就不多bb了,樹的性質)

很容易發現乙個性質,如果一條鏈走完,我們必須回頭再走一次那條鏈(或一部分)才可以走到更多的點

所以為了減少這個損失,我們以最長鏈(從起點開始的最長鏈)的終點(最低端)為終點(步數走完不須回頭),既然做到減少了最多的不必要,那麼這樣一定會是最優的。(可以證明是最優的,只是我不知道,舉不出反例我就寫了)

考慮除了走最長鏈步數之外的剩餘步數。最好畫個圖,既然我們一定要走最長鏈,那麼可以看做一根樹幹上長了其他的一些枝條,我們的剩餘步數就是用來走這些地方的,很容易證明一定可以額外走到 (剩餘步數/2) 個節點(最長鏈之外)。

沒了……(**實現基本沒難度)

#include#include#include#include#include#include#include#include#include#include#include#define rg register

#define il inline

#define lst long long

#define ldb long double

#define n 150

using namespace std;

const int inf=1e9;

int n,step,cnt;

int ans,ans_st;

struct edgeljl[n<<1];

int hd[n];

int vis[n];

il int read()

while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();

return m?-s:s;

}il void add(rg int p,rg int q)

,hd[p]=cnt;

}void dfs(rg int fm,rg int now,rg int st,rg int ss)

}int main()

{ n=read(),step=read();

for(rg int i=1;i**還是很好看的,只是變數為了通俗就很醜

小Q的棋盤 貪心

洛谷傳送門 顯然這是一棵樹 這個就不多bb了,樹的性質 很容易發現乙個性質,如果一條鏈走完,我們必須回頭再走一次那條鏈 或一部分 才可以走到更多的點 所以為了減少這個損失,我們以最長鏈 從起點開始的最長鏈 的終點 最低端 為終點 步數走完不須回頭 既然做到減少了最多的不必要,那麼這樣一定會是最優的。...

CQOI2017 小Q的棋盤

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

CQOI2017 小Q的棋盤

看到這道題,很容易想到是一道樹型dp,那麼該如何做?首先我們可以先這樣定義狀態,fi,jf fi,j 表示以i ii為根節點,向下走j jj步最多能經過多少點,但很明顯,只是這樣是不行的,所以我們再加一維,第三維為0表示不會到根節點,第三維為1表示需要回到根節點,那麼就可以得出狀態轉移方程 f ma...