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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

poj 3417 树形dp+LCA

發布時間:2024/1/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 3417 树形dp+LCA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路:我以前一直喜歡用根號n分段的LCA。在這題上掛了,第一次發現這樣的LCA被卡。果斷改用Tarjan離線算法求LCA。

當前節點為u,其子節點為v。那么:

當以v根的子樹中含有連接子樹以外點的邊數為out[v]。

out[v]==0,dp[u]+=m;

out[v]==1,dp[u]+=1;

else dp[u]+=0;

最后就是dp[u]+=dp[v]。

對于u點的out[u]+=out[v];

最后out[u]-=cnt[u];cnt[u]表示以u為根,在子樹內的邊數。

#include<map> #include<set> #include<cmath> #include<queue> #include<cstdio> #include<vector> #include<string> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define Maxn 100010 #define Maxm 200010 #define LL __int64 #define Abs(x) ((x)>0?(x):(-x)) #define lson(x) (x<<1) #define rson(x) (x<<1|1) #define inf 0x7fffffff #define Mod 1000000007 using namespace std; int head[Maxn],vi[Maxn],val[Maxn],e,dp[Maxn],fs[Maxn],fa[Maxn],out[Maxn],cnt[Maxn],anc[Maxn],vis[Maxn],n,m; struct Edge{int u,v,next; }edge[Maxm]; vector<int> ll[Maxn]; void init() {memset(head,-1,sizeof(head));memset(vi,0,sizeof(vi));memset(out,0,sizeof(out));memset(cnt,0,sizeof(cnt));memset(fs,0,sizeof(fs));e=0; } void add(int u,int v) {edge[e].u=u,edge[e].v=v,edge[e].next=head[u],head[u]=e++;edge[e].u=v,edge[e].v=u,edge[e].next=head[v],head[v]=e++; } void Treedp(int u) {int i,v;vi[u]=1;dp[u]=0;for(i=head[u];i!=-1;i=edge[i].next){v=edge[i].v;if(vi[v]) continue;Treedp(v);dp[u]+=dp[v];if(!out[v]) dp[u]+=m;else if(out[v]==1) dp[u]++;out[u]+=out[v];}out[u]-=cnt[u]; } int find(int x) {if(x!=fa[x])fa[x]=find(fa[x]);return fa[x]; } void merg(int a,int b) {int x=find(a);int y=find(b);if(fs[y]<=fs[x])fa[y]=x,fs[x]+=fs[y];else fa[x]=y,fs[y]+=fs[x]; } void LCA(int u) {int i,v,sz;sz=ll[u].size();vi[u]=1;anc[u]=u;for(i=head[u];i!=-1;i=edge[i].next){v=edge[i].v;if(vi[v]) continue;LCA(v);merg(u,v);anc[find(u)]=u;}vis[u]=1;for(i=0;i<sz;i++){v=ll[u][i];if(vis[v]){int lca=anc[find(v)];if(lca==u){out[v]++;cnt[u]++;}else if(lca==v){out[u]++;cnt[v]++;} else {cnt[lca]+=2;out[u]++,out[v]++;}}} } int main() {int i,j,u,v;scanf("%d%d",&n,&m);memset(head,-1,sizeof(head));for(i=0;i<Maxn;i++)fa[i]=i,fs[i]=1;for(i=1;i<n;i++){scanf("%d%d",&u,&v);add(u,v);}for(i=1;i<=m;i++){scanf("%d%d",&u,&v);ll[u].push_back(v);ll[v].push_back(u);}LCA(1);memset(vi,0,sizeof(vi));Treedp(1);printf("%d\n",dp[1]);return 0; }

?

轉載于:https://www.cnblogs.com/wangfang20/p/3294572.html

總結

以上是生活随笔為你收集整理的poj 3417 树形dp+LCA的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲白浆| 久久久久在线观看 | 成人av网址在线观看 | 亚洲超碰在线观看 | 精品久久久久久久中文字幕 | 人妻在线一区二区三区 | 一区二区三区四区国产 | yy色综合 | 波多av在线 | 美国黄色一级大片 | 狼人精品一区二区三区在线 | 高清乱码免费 | 热播网| 人人澡超碰碰97碰碰碰 | 厨房性猛交hd | 久久综合色88 | 午夜国产视频 | 美女精品| 国产精品扒开做爽爽爽的视频 | 日韩精品一区不卡 | 亚洲女优一区 | 国产高清免费av | 我的好妈妈在线观看 | 91精品久久久久久久久久 | 在线观看黄色片网站 | 成人精品视频99在线观看免费 | 白丝美女喷水 | 亚洲美女毛片 | 91精彩视频| 人妻熟女一区二区三区app下载 | 91精品国产乱码久久久张津瑜 | 精品无码人妻一区二区免费蜜桃 | 国产专区第一页 | 欧美亚洲综合久久 | 日本美女影院 | 久久久久久久久久久久久久久 | 欧美美女一级片 | 国产高清在线 | a级成人毛片 | 久久久久久五月天 | www.xxxxx日本 | 亚洲天堂免费视频 | mm131在线 | 天天干中文字幕 | 男生插女生的网站 | 国产一区二区三区网站 | 国产伦人伦偷精品视频 | 色爽av| 99热这里只有精品8 国产一卡二 | 最近最新中文字幕 | 非洲黄色片 | 亚洲尤物视频 | 日韩小视频网站 | 色哟哟在线播放 | 精品电影在线观看 | 大尺度做爰啪啪床戏 | 国产麻豆一精品一av一免费 | 波多野结衣在线网址 | a在线一区| 在线午夜电影 | 男插女视频免费 | 免费在线成人av | 91在线播 | 伊人网免费视频 | 国产福利二区 | 蜜臀视频一区二区 | 亚洲精品久久久久久宅男 | 9999久久久久 | 免费观看黄色小视频 | 免费中文字幕av | 欧美乱妇狂野欧美视频 | 欧美激情免费在线 | 91九色网站| 久久一区二区三区四区 | 中国农村一级片 | 国产美女久久久久 | 久久久久99精品成人片直播 | 一级全黄毛片 | 国产女人高潮的av毛片 | 97se.com| 三级性生活视频 | 亚洲清色 | 国产精品对白刺激久久久 | 成人片黄网站色大片免费毛片 | 成人手机视频 | 色婷婷av一区二区三区之红樱桃 | 色综合久久精品亚洲国产 | 国产熟妇搡bbbb搡bbbb | 欧美变态绿帽cuckold | 国产av一区二区三区精品 | 午夜有码 | 少妇第一次交换又紧又爽 | 中文字幕精品在线观看 | 一级片亚洲 | 国产一区在线免费 | 在线视频免费播放 | 亚洲成人av | 91精品国自产 | 熟睡侵犯の奶水授乳在线 |