將軍令 貪心演算法

2022-02-18 16:14:49 字數 2081 閱讀 1537

當然如果你想像考場上傻掉的我一樣打樹上dp,那祝你碼得愉快了。

1 #include2

using

namespace

std;

3#define set(p) memset(dp[p],0x3f,sizeof(dp[p]))

4int dp[100005][5][5],n,fir[100005],l[200005],to[200005

],cnt,k,p;

5void connect(int a,intb)9

void dfs(int p,int

f)22

for(int i=0;i<=k+1;++i)for(int j=0;j<=k;++j)dp[p][i][j]=dp[t][i][j];

23for(int i=0;i<=k+1;++i)for(int j=0;j1]=min(dp[p][i][j+1

],dp[p][i][j]);

24for(int i=0;i<=k;++i)for(int j=0;j<=k;++j)dp[p][i+1][j]=min(dp[p][i+1

][j],dp[p][i][j]);25}

26int

main()

先交的40分。只能處理k=1的樹上dp

1 #include2

using

namespace

std;

3#define set(p) memset(dp[p],0x3f,sizeof(dp[p]))

4int dp[100005][11][11],n,fir[100005],l[200005],to[200005

],cnt,k,p;

5void connect(int a,intb)9

void dfs(int p,int

f)22

for(int i=0;i<=k+1;++i)for(int j=0;j<=k;++j)dp[p][i][j]=dp[t][i][j];

23for(int i=0;i<=k+1;++i)for(int j=0;j1]=min(dp[p][i][j+1

],dp[p][i][j]);

24for(int i=0;i<=k;++i)for(int j=0;j<=k;++j)dp[p][i+1][j]=min(dp[p][i+1

][j],dp[p][i][j]);25}

26int

main()

34 puts(""

);35

}36 }

蓋掉它的0分**(沒刪除錯語句)實際上是20分)

當然貪心這種東西除非會證明不然是真的不敢打。上次的t1就沒發現那是乙個貪心然而證明了正確性。。。

當然這次根本沒有往那個方向上去想。

這個寫的太好了。我無法反駁(因為它就是對的)

所以,就沒了!

我們只需要維護乙個陣列f,表示從這個點開始多大的範圍內能都被控制。

那麼我們在乙個新的位置上設定守衛時這個位置的f就是k

嘗試更新與它相鄰的點,它們的f在已有的f和k-1中取max就好。

然後同理繼續向外擴散就好了。初值要賦成-1,那麼f!=-1就表示這個點已經被看守了。

1 #include2

using

namespace

std;

3 priority_queueint,int> >q;

4int res[100005],cnt,n,k,t,fir[100005],l[200005],to[200005],f[100005

],ans;

5void link(int a,int b)

6void pre_dfs(int p,int fa,int

dep)

10void dfs(int

p)14

intmain()

23 printf("

%d\n

",ans);

24 }

773b的小東西

題解 將軍令

這道題我看到有人打了樹形 dp 我當時想,每種情況都要討論,20 的dp方程,那位神仙是給某主播打賞了10萬後氣急敗壞了嗎?有的時候,可以貪心的別莽著打dp啊 有道簡化版 p2279 hnoi2003 消防局的設立 樹形dp or 貪心 luogu傳送門 p3942 將軍令 又想起了四月。如果不是省...

將軍令題解

首先,每個葉子節點都要被至少乙個小隊控制,則貪心地放置小隊,放置之後沒被覆蓋的點跟屬於控制範圍的點無關,又屬於新的 葉子 繼續遞迴。如何貪心地放置?對於每乙個點,我們求出離它最遠的沒被覆蓋的點,若距離超過k 它離最近的小隊的距離,則必定放置小隊,並把離它距離小於等於k的父親標記,值為離它距離。inc...

貪心 洛谷3942將軍令

貪心 好 如果某個點沒被控制,我們當然選擇在他的第k的祖先 建站,這也就是貪心的思路。這個 某個點 我們肯定要從深度最大的點開始。所以說,先bfs一遍,bfs完的佇列就是按深度從小到大排序的了,我們從最後開始往前面迴圈,對於沒有被控制的點,ans,找出他的第k個祖先,然後dfs他的第k個祖先,向所有...