BZOJ 1086 [SCOI2005]王室联邦(树分块)
生活随笔
收集整理的這篇文章主要介紹了
BZOJ 1086 [SCOI2005]王室联邦(树分块)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:中文題,略
思路:秦皇島前就一直想學(xué),后來(lái)沒(méi)怎么想通,就算了。現(xiàn)在雅不是很懂,一直似懂非懂的,對(duì)于樹分塊的種類,有位聚聚已經(jīng)整理好了(傳送門),其他的就是直接搜索分塊
代碼:
#include <bits/stdc++.h> using namespace std;const int maxn=1e4+7; struct Edge {int v,nxt; }e[maxn<<1]; int top,stk[maxn]; int cnt,root[maxn]; int tot; int belong[maxn],head[maxn]; int n,block; void addedge(int x,int y) {e[++tot].v=y;e[tot].nxt=head[x];head[x]=tot; } void dfs(int x,int pre) {int bottom=top;for(int i=head[x];i;i=e[i].nxt){if(e[i].v==pre)continue;dfs(e[i].v,x);if(top-bottom>=block){root[++cnt]=x;while(top!=bottom)belong[stk[top--]]=cnt;}}stk[++top]=x; } int main() {scanf("%d%d",&n,&block);for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);addedge(x,y);addedge(y,x);}dfs(1,0);while(top)belong[stk[top--]]=cnt;printf("%d\n",cnt);for(int i=1;i<=n;i++)printf("%d ",belong[i]);puts("");for(int i=1;i<=cnt;i++)printf("%d ",root[i]);puts("");return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/lalalatianlalu/p/9758661.html
總結(jié)
以上是生活随笔為你收集整理的BZOJ 1086 [SCOI2005]王室联邦(树分块)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 论文信息系统项目管理的进度管理
- 下一篇: HBase权威指南,架构:存储