日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[HNOI]2003 消防局的建立

發(fā)布時間:2024/5/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [HNOI]2003 消防局的建立 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

消防局的建立
本題地址: http://www.luogu.org/problem/show?pid=2279

題目描述

2020年,人類在火星上建立了一個龐大的基地群,總共有n個基地。起初為了節(jié)約材料,人類只修建了n-1條道路來連接這些基地,并且每兩個基地都能夠通過道路到達(dá),所以所有的基地形成了一個巨大的樹狀結(jié)構(gòu)。如果基地A到基地B至少要經(jīng)過d條道路的話,我們稱基地A到基地B的距離為d。
由于火星上非常干燥,經(jīng)常引發(fā)火災(zāi),人類決定在火星上修建若干個消防局。消防局只能修建在基地里,每個消防局有能力撲滅與它距離不超過2的基地的火災(zāi)。
你的任務(wù)是計算至少要修建多少個消防局才能夠確保火星上所有的基地在發(fā)生火災(zāi)時,消防隊有能力及時撲滅火災(zāi)。

輸入輸出格式

輸入格式:
輸入文件名為input.txt。
輸入文件的第一行為n (n<=1000),表示火星上基地的數(shù)目。接下來的n-1行每行有一個正整數(shù),其中文件第i行的正整數(shù)為a[i],表示從編號為i的基地到編號為a[i]的基地之間有一條道路,為了更加簡潔的描述樹狀結(jié)構(gòu)的基地群,有a[i]< i。

輸出格式:
輸出文件名為output.txt
輸出文件僅有一個正整數(shù),表示至少要設(shè)立多少個消防局才有能力及時撲滅任何基地發(fā)生的火災(zāi)。

輸入輸出樣例
輸入樣例#1:
6
1
2
3
4
5
輸出樣例#1:
2

題解

這是一道蛋疼的樹形DP,樹形DP一般狀態(tài)表示比較復(fù)雜;在題解幫助下過掉;
%大神Crazyxx http://202.101.104.45:8888/space/show?uid=6076
狀態(tài):
dp[i][0]:選自己
dp[i][1]:選了至少一個兒子
dp[i][2]:選了至少一個孫子
———————————–這三種是覆蓋了自己的
dp[i][3]: 兒子孫子全部覆蓋
dp[i][4]:孫子全部覆蓋
———————————–這兩種并沒有覆蓋自己
建議畫一棵深度為3的完全二叉樹直觀觀察狀態(tài) 否則轉(zhuǎn)移方程比較難懂

初始轉(zhuǎn)移方程:
dp[i][0] = 1+Σmin(dp[j][0…4]);
要使選了根節(jié)點(diǎn)之后合法(整棵子樹包括根節(jié)點(diǎn)被覆蓋)必須使兒子的孫子全部覆蓋 0~4狀態(tài)滿足
dp[i][1] = min( dp[k][0] + Σ(j != k)min(dp[j][0…3]) );
要使選了一個兒子之后合法 由于兒子只可以覆蓋到兄弟 所以孫子一定要全部被覆蓋 即兒子的兒子一定覆蓋 0~3滿足
dp[i][2] = min( dp[k][1] + Σ(j != k)min(dp[j][0…2]) );
使選了一個孫子之后合法 由于孫子最多只能覆蓋到當(dāng)前節(jié)點(diǎn) 所以兒子一定全部覆蓋 即所有兒子本身要被覆蓋 0~2滿足
dp[i][3] = Σdp[j][0…2];
要使兒子及孫子全部被覆蓋 即兒子本身要被覆蓋 0~2滿足
dp[i][4] = Σdp[j][0…3];
要使孫子全部被覆蓋 即兒子的兒子要全部被覆蓋 0~3滿足
::注意每種狀態(tài)由兒子轉(zhuǎn)移過來所以根的情況 要轉(zhuǎn)化成對于兒子來說的情況

然后改進(jìn)狀態(tài) 因?yàn)槊糠N轉(zhuǎn)移方程至少有三種可能最后取其中較小的 故時間效率較低 令dp[i][k]表示min(dp[i][0],dp[i][1]….dp[i][k])且k>=2 因?yàn)樯鲜鲛D(zhuǎn)移方程最少都是0~2狀態(tài)
那么轉(zhuǎn)移方程就大幅度化簡了:
dp[i][0] = 1+Σdp[j][4];
直接由上面變形而來
dp[i][1] = dp[i][4] + min(dp[k][0]-dp[k][3]);
選一個兒子 需保證所有孫子被覆蓋 即 dp[i][4] 然后要選出一個兒子 將他從0~3狀態(tài)變?yōu)檫x了自己(由于dp[i][4]中他是3狀態(tài)所以要減去一個dp[k][3]) 取這個差值最小的兒子
dp[i][2] = dp[i][3] + min(dp[k][1]-dp[k][2]);
選一個孫子 與上面類似 要保證所有兒子都被覆蓋 即dp[i][3] 再將一個兒子從0~2狀態(tài)變?yōu)?~1狀態(tài)以保證覆蓋他父節(jié)點(diǎn)
dp[i][3] = Σdp[j][2];
保證所有兒子被覆蓋 兒子的0~2狀態(tài)均符合條件
dp[i][4] = Σdp[j][3];
保證所有兒子的兒子被覆蓋 兒子的0~3狀態(tài)均符合條件

別問我為什么dp[i][1]和dp[1][2]用到后面的狀態(tài) 因?yàn)槟阒恍枰谶^程中記下那一坨min的值 把3,4處理完后再算1,2
另外由于數(shù)據(jù)特殊性 編號大的節(jié)點(diǎn)一定是編號小的節(jié)點(diǎn)的后代 所以遞推順序直接到著推就好了


代碼:(神犇的代碼稍作改動)

#include<iostream> #include<algorithm> #include<cstdio> using namespace std; const int maxn=1000+10; const int INF=(1<<30);bool G[maxn][maxn]; int dp[maxn][5]; int main() {int n;cin>>n;for(int i=2,tmp;i<=n;i++){scanf("%d",&tmp);G[tmp][i]=1;}for(int i = n ; i>=1 ; i--){int x1=INF,x2=INF;dp[ i ][ 0 ]=1;for(int j=1;j<=n;j++)if(G[ i ][ j ]){dp[ i ][ 0 ]+=dp[ j ][ 4 ];dp[ i ][ 3 ]+=dp[ j ][ 2 ];dp[ i ][ 4 ]+=dp[ j ][ 3 ];x1=min(x1,dp[ j ][ 0] -dp[ j ][ 3 ]);x2=min(x1,dp[ j ][ 1 ]-dp[ j ][ 2 ]);}dp[ i ][ 1 ]=dp[ i ][ 4 ]+x1;dp[ i ][ 2 ]=min(dp[ i ][ 3 ]+x2,min(dp[ i ][ 0 ],dp[ i ][ 1 ]));dp[ i ][ 3 ]=min(dp[ i ][ 2 ],dp[ i ][ 3 ]);dp[ i ][ 4 ]=min(dp[ i ][ 3 ],dp[ i ][ 4 ]);}printf("%d",dp[ 1 ][ 2 ]);return 0; }

覺得做完之后對于樹形DP有了新的認(rèn)識 = =漲姿勢了

總結(jié)

以上是生活随笔為你收集整理的[HNOI]2003 消防局的建立的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本视频黄色 | 欧洲做受高潮免费看 | 玖玖999 | 少妇被按摩师摸高潮了 | 美女毛片视频 | 亚洲一区二区三区播放 | 欧美一区二区三区小说 | 在线看h网站 | 黄色片中国 | 日韩一级性生活片 | 成av人片一区二区三区久久 | 欧美另类国产 | 欧美人与zoxxxx另类 | 蜜桃91麻豆精品一二三区 | 住在隔壁的她动漫免费观看全集下载 | 禁果av一区二区三区 | 日韩色影院 | 91精品在线观看入口 | 探花视频在线免费观看 | 日韩免费视频一区二区 | 亚欧洲精品在线视频 | 国产性生活片 | 懂色av蜜臀av粉嫩av分享 | 亚洲黄片一区二区 | 日韩一级黄色 | 欧美成人综合在线 | 日本免费www| 高清久久久 | 中文字幕永久在线观看 | 国产福利一区二区三区 | 亚洲天堂2016 | 色婷婷狠狠爱 | 国产精品17p | 自拍偷拍精品 | 中国黄色录像 | 国产精品久久伊人 | 我的好妈妈在线观看 | 国产一区免费看 | 日韩欧美综合久久 | 伊人99re | 色综合久久久久久 | 成人免费超碰 | 国产精品波多野结衣 | 国产精品23p| 荷兰av | 亚洲精品国产欧美在线观看 | 五月伊人婷婷 | 日韩高清成人 | 精品久久久在线观看 | 精品国产1区 | 99九九热| 中文字幕乱码在线 | 熟妇大屁股一区二区三区视频 | 久久久久久久久久免费 | 草草影院在线 | 男人扒女人添高潮视频 | 婷婷去俺也去 | 亚洲高清资源 | 91久久精品一区二区三区 | 国产原创麻豆 | 亚洲av色区一区二区三区 | 亚洲精品国产精品国自产在线 | 91久久一区二区 | 日韩看片 | 亚洲一区图片 | 爱色av网站| 西川结衣在线观看 | 精品视频久久久 | 亚洲男人的天堂在线视频 | 日产mv免费观看 | 在线观看成人免费视频 | 福利片网址 | 欧美日韩中文 | 原创真实夫妻啪啪av | 国产福利视频导航 | 亚洲av无码国产精品永久一区 | 波多野结衣在线视频免费观看 | 久久久国产成人一区二区三区 | 亚洲最大成人综合网 | 久久视频一区二区 | 国产欧美一区在线观看 | 小柔的裸露日记h | 成人性免费视频 | 91热精品 | 无码精品人妻一二三区红粉影视 | 欧美视频在线观看 | 特级淫片裸体免费看冫 | 中国特级黄色大片 | 久久精品国产一区二区 | 国产精品久久久免费视频 | 日本啪啪动态图 | 国产一区二区三区黄片 | 免费网站在线高清观看 | 中文av一区二区三区 | 一个人看的www视频在线观看 | 揄拍自拍 | 嫩草视频网站 | 色片免费看 | 久久精品福利视频 |