BZOJ:2815: [ZJOI2012]灾难
题解:
构造灭绝树;
x指向的点表示x的祖先死亡则x死亡
动态LCA;
可以用LCT维护或直接更新倍增数组
最后统计子树点的个数
坑:
我还不会序列型Toposort
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=100000; int n;
vector<int>G[maxn];
vector<int>G2[maxn]; int cntedge;
int head[maxn];
int to[maxn<<1],nex[maxn<<1];
int addedge(int x,int y){
nex[++cntedge]=head[x];
to[cntedge]=y;
head[x]=cntedge;
} int f[maxn][20];
int depth[maxn];
int Lcainit(int i,int fa){
f[i][0]=fa;depth[i]=depth[fa]+1;
for(int j=1;j<=19;++j){
f[i][j]=f[f[i][j-1]][j-1];
}
} int Getlca(int x,int y){
if(depth[x]<depth[y])swap(x,y);
for(int j=19;j>=0;--j){
if(depth[f[x][j]]>=depth[y]){
x=f[x][j];
}
}
if(x==y)return x;
for(int j=19;j>=0;--j){
if(f[x][j]!=f[y][j]){
x=f[x][j];y=f[y][j];
}
}
return f[x][0];
} int root;
int indegree[maxn];
int sta[maxn],top;
int lca[maxn];
int Toposort(){
for(int i=1;i<=n;++i){
if(indegree[i]==0){
sta[++top]=i;
Lcainit(i,root);
G2[root].push_back(i);
}
}
while(top){
int x=sta[top--];
for(int i=head[x];i;i=nex[i]){
--indegree[to[i]];
if(indegree[to[i]]==0){
sta[++top]=to[i];
for(int j=0;j<G[to[i]].size();++j){
int v=G[to[i]][j];
if(lca[to[i]]==0){
lca[to[i]]=v;
}else{
lca[to[i]]=Getlca(lca[to[i]],v);
}
}
Lcainit(to[i],lca[to[i]]);
G2[lca[to[i]]].push_back(to[i]);
}
}
}
} int siz[maxn];
int dfs(int now,int fa){
siz[now]=1;
for(int i=0;i<G2[now].size();++i){
int v=G2[now][i];
if(v==fa)continue;
dfs(v,now);
siz[now]+=siz[v];
}
} void minit(){
for(int i=1;i<=n+1;++i){
G[i].clear();G2[i].clear();
}
cntedge=top=0;
memset(head,0,sizeof(head));
memset(f,0,sizeof(f));
memset(indegree,0,sizeof(indegree));
memset(lca,0,sizeof(lca));
}
int main(){
scanf("%d",&n);
minit();
root=n+1;depth[root]=1;
for(int i=1;i<=n;++i){
int x;
scanf("%d",&x);
while(x){
G[i].push_back(x);
addedge(x,i);
indegree[i]++;
scanf("%d",&x);
}
}
Toposort();
dfs(root,0);
for(int i=1;i<=n;++i)printf("%d\n",siz[i]-1);
return 0;
}
BZOJ:2815: [ZJOI2012]灾难的更多相关文章
- BZOJ 2815: [ZJOI2012]灾难
呃,题面没了,大概就是给出一些生物之间的捕食关系,求灭绝树每个点的灾难值. 拓扑排序之后倒着加入点,动态维护fa[][]数组,倍增法求LCA,当然大佬愿意写动态树也是极好的…… #include &l ...
- bzoj 2815 [ZJOI2012]灾难(构造,树形DP)
[题意] 求把每个点删除后,不可达点的数目. [思路] 构造一棵“灭绝树”,要求这棵树满足如果删除根节点后则该子树内的所有结点都不可达.则答案为子树大小-1. 如何构造这棵“灭绝树”? 将原图拓扑排序 ...
- BZOJ 2815: [ZJOI2012]灾难 拓扑排序+倍增LCA
这种问题的转化方式挺巧妙的. Code: #include <bits/stdc++.h> #define N 100000 #define M 1000000 #define setIO ...
- 2815: [ZJOI2012]灾难 - BZOJ
题目描述 Description 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的 ...
- 【BZOJ】2815: [ZJOI2012]灾难
简要题意: 给一个有向无环图,问每个节点删掉之后会导致多少个点不可达. 似乎以前拿来考过.... 我们定义一棵树,它满足对应点造成的灭绝值即为当点的子树大小-1 按照被捕食者--->捕食者的关系 ...
- BZOJ2815: [ZJOI2012]灾难
传送门 学LCA的时候根本没意识到LCA可以有这么多玩法. 这玩意据说是个高级数据结构(支配树)的弱化版,蒟蒻没学过呀.所以出题人提出一个概念叫灾难树. 我理解的灾难树的意思实际上是属于DAG的一个子 ...
- 【BZOJ2815】[ZJOI2012]灾难 拓扑排序+LCA
[BZOJ2815][ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从 ...
- Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造
Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造 题意: 我们用一种叫做食物网的有向图来描述生物之间的关系:一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连 ...
- [洛谷P2597] [ZJOI2012]灾难
洛谷题目链接:[ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引 ...
随机推荐
- JDBC原理及常见错误分析
1.JDBC:Java DataBase Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式,用Java来操作数据库 2.JDBC API 主要功能: 三件事,具体是通过以下 ...
- OSX10.10 Yosemite安装Metasploit
安装环境 操作时间: 2015/6/8 操作系统: OSX Yosemite 10.10.3 Metasploit版本: v4.11.0-dev [core:4.11.0.pre.dev api:1. ...
- Ubuntu18.04 ElasticSearch7.3.2集群搭建(一)
集群规划: Hostname Elasticsearch Kibana Marvel Marvel Client node01 √ √ √ √ node02 √ √ node03 √ √ node04 ...
- SciPy 安装
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- HTML学习第七天(二)
HTML学习第七天(二) 新增的非主体结构 header元素 footer元素 hgroup元素 address元素 header元素:通常用于存放整个页面或页面内的一个区域块的标题,但也可以存放类似 ...
- 部署 Prometheus Operator【转】
本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...
- liunx mysql 5.7 二进制安装
liunx 5.6版本 本人安装次数不下20次,基本上按照正常的操作流程不会出现什么问题,一切顺利. 今天开发新项目需要按照mysql 5.7 版本.mysql 5.7版本和mysql 5.6版本变化 ...
- R分析实现对招聘网站薪资预测分析
1.首先确定数据分析目标——薪酬受哪些因素影响 确定变量: 因变量:薪资 自变量:(定性)-- 公司类别.公司规模.地区.行业类别.学历要求.软件要求. (定量)-- 经验要求(数值型) 分析目标:建 ...
- [Codeforces]1263E Editor
The development of a text editor is a hard problem. You need to implement an extra module for bracke ...
- 015.Delphi插件之QPlugins,FMX插件窗口
内嵌FMX的插件窗口,效果还是很可以的.退出时,会报错,很诡异啊. 主窗口代码如下 unit Frm_Main; interface uses Winapi.Windows, Winapi.Messa ...