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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P4201-[NOI2008]设计路线【结论,树形dp】

發布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4201-[NOI2008]设计路线【结论,树形dp】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P4201


題目大意

給出nnn個點的一棵樹開始所有邊都是白色,選出若干條沒有公共點的路徑將上面所有邊變為黑色。

要求所有點到111號點的路徑上經過的白色邊的數量的最大值最小。

求最小值和方案數


解題思路

直接記錄最小值的樹形dpdpdp可以計算出第一個答案,但是第二個答案就有點麻煩了,因為有的不取最小值也不一定影響答案。

而可以發現如果按照樹鏈剖分的思路來做答案是不會超過log?2n\log_2nlog2?n的,進一步證明的話其實可以得到答案不會超過log?3n\log_3 nlog3?n的結論,因為一個頂部節點實際上是可以延伸出222條路徑的。

這樣就可以直接dpdpdp了,設fi,j,0/1/2f_{i,j,0/1/2}fi,j,0/1/2?表示到節點iii,最大值為jjj,節點iii已經往子樹中延伸了0/1/20/1/20/1/2條路徑時的方案數。

那么轉移起來就很方便了,需要注意答案可能是模數的倍數,所以我們需要另開一個變量來記錄每種情況是否有可能。

時間復雜度O(nlog?3n)O(n\log_3 n)O(nlog3?n)


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=1e5+10; struct node{ll to,next; }a[N<<1]; ll n,m,P,tot,ls[N],f[N][12][3]; bool v[N][12][3]; void addl(ll x,ll y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return; } void dp(ll x,ll fa){for(ll i=1;i<=11;i++)f[x][i][0]=v[x][i][0]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa)continue;dp(y,x);for(ll j=1;j<=11;j++){ll cho=(f[y][j-1][0]+f[y][j-1][1]+f[y][j-1][2])%P;ll che=(f[y][j][0]+f[y][j][1])%P;ll chv=v[y][j-1][0]|v[y][j-1][1]|v[y][j-1][2];ll chn=v[y][j][0]|v[y][j][1];(f[x][j][2]=f[x][j][1]*che+f[x][j][2]*cho)%=P;(f[x][j][1]=f[x][j][0]*che+f[x][j][1]*cho)%=P; (f[x][j][0]*=cho)%=P;v[x][j][2]=v[x][j][1]&chn|v[x][j][2]&chv;v[x][j][1]=v[x][j][0]&chn|v[x][j][0]&chv; v[x][j][0]&=chv;}}return; } signed main() {scanf("%lld%lld%lld",&n,&m,&P);if(m!=n-1)return printf("-1\n-1")&0;for(ll i=1;i<=m;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x); }dp(1,1);for(ll i=1;i<=11;i++){ll p=v[1][i][0]|v[1][i][1]|v[1][i][2];if(!p)continue;printf("%lld\n%lld",i-1,(f[1][i][0]+f[1][i][1]+f[1][i][2])%P);break;}return 0; }

總結

以上是生活随笔為你收集整理的P4201-[NOI2008]设计路线【结论,树形dp】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。