Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造
BZOJ_2815_[ZJOI2012]灾难 倍增lca + 构造
题意:
我们用一种叫做食物网的有向图来描述生物之间的关系:一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连一个有向边。这个图没有环。图中有一些点没有连出边,这些点代表的生物都是生产者,可以通过光合作用来生存; 而有连出边的点代表的都是消费者,它们必须通过吃其他生物来生存。如果某个消费者的所有食物都灭绝了,它会跟着灭绝。我们定义一个生物在食物网中的“灾难值”为,如果它突然灭绝,那么会跟着一起灭绝的生物的种数。
给定一个食物网,你要求出每个生物的灾难值。
分析:
按照图中给出的图的拓扑序插点,对于每个点,让能吃它的所有点的lca作为它的父亲
统计一下子树大小就是答案
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 700000 int head[N],to[N<<1],nxt[N<<1],cnt;
int n,m,c[N],Q[N],l,r,f[N][21],dep[N];
int pos[N],siz[N];
int too[N],nxtt[N],headd[N]; inline void add(int u,int v){
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
} inline void adda(int u,int v){
too[++cnt]=v;nxtt[cnt]=headd[u];headd[u]=cnt;
} int lca(int x,int y){
int i;
if(dep[x]<dep[y])swap(x,y);
for(i=20;i>=0;i--){
if(dep[f[x][i]]>=dep[y])x=f[x][i];
}
if(x==y)return x;
for(i=20;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
} void dfs(int x,int y){
siz[x]=1;
int i; for(i=head[x];i;i=nxt[i]){
if(to[i]!=y){
dfs(to[i],x);
siz[x]+=siz[to[i]];
}
}
} int main(){
scanf("%d",&n); int i,j,x; for(i=1;i<=n;i++){
for(scanf("%d",&x);x;scanf("%d",&x)){
adda(x,i);c[i]++;
}
} cnt=0; dep[n+1]=1;
for(i=1;i<=n;i++){
if(!c[i]){
Q[r++]=i;
dep[i]=1;
add(i,n+1);
add(n+1,i);
dep[i]=2;
f[i][0]=n+1;
for(j=1;j<=20;j++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
}
while(l<r){
x=Q[l++]; for(i=headd[x];i;i=nxtt[i]){
c[too[i]]--;
if(!pos[too[i]]){
pos[too[i]]=x;
}else{
pos[too[i]]=lca(pos[too[i]],x);
}
if(!c[too[i]]){
add(too[i],pos[too[i]]);
add(pos[too[i]],too[i]);
dep[too[i]]=dep[pos[too[i]]]+1;
f[too[i]][0]=pos[too[i]]; for(j=1;j<=20;j++){
f[too[i]][j]=f[f[too[i]][j-1]][j-1];
} Q[r++]=too[i];
}
}
} //printf("%d\n",root);
//for(i=1;i<=n;i++)if(dep[i]==1)dfs(i,0);
dfs(n+1,0); for(i=1;i<=n;i++){
printf("%d\n",siz[i]-1);
}
}
Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造的更多相关文章
- 【洛谷 P2597】 [ZJOI2012]灾难(LCA)
题目链接 考虑建一棵树,使一个生物灭绝时他的子树都会灭绝,显然这样答案就是以每个点为根的子树大小-1. 为什么原图不是一棵树,因为一个生物可能会以多个生物为食,所以按拓扑序来建树,把每个遍历到的点的父 ...
- 【bzoj2815】[ZJOI2012]灾难 拓扑排序+倍增LCA
题目描述(转自洛谷) 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过生物 ...
- P2597 [ZJOI2012]灾难——拓扑,倍增,LCA
最近想学支配树,但是基础还是要打好了的: P2597 [ZJOI2012]灾难 这道题是根据食物链链接出一个有向图的关系,求一个物种的灭绝会连带几种物种的灭绝: 求得就是一个点能支配几个点: 如果一个 ...
- 【BZOJ2815】[ZJOI2012]灾难 拓扑排序+LCA
[BZOJ2815][ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从 ...
- [洛谷P2597] [ZJOI2012]灾难
洛谷题目链接:[ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引 ...
- 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...
- 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...
- 1321. [ZJOI2012] 灾难
1321. [ZJOI2012] 灾难 ★★☆ 输入文件:catas.in 输出文件:catas.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 阿米巴是小强的 ...
- 洛谷 P2597 [ZJOI2012]灾难 解题报告
P2597 [ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发 ...
随机推荐
- Group Anagrams 群组错位词
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- MySQL 中索引的限制
MySQL 中索引的限制在使用索引的同时,我们还应该了解在MySQL 中索引存在的限制,以便在索引应用中尽可能的避开限制所带来的问题.下面列出了目前MySQL 中索引使用相关的限制.1. MyISAM ...
- Liunx权限修改命令
语法: chmod 数值 文件名 例: chmod 644 mm.txt 命令执行后,文件mm.txt的权限值为 rw-r--r-- 详解: 权限分为 读.写.执行三种,分别用字母 ...
- 排序算法的C语言实现(下 线性时间排序:计数排序与基数排序)
计数排序 计数排序是一种高效的线性排序. 它通过计算一个集合中元素出现的次数来确定集合如何排序.不同于插入排序.快速排序等基于元素比较的排序,计数排序是不需要进行元素比较的,而且它的运行效率要比效率为 ...
- Day20 Django的使用_基础
老师网址: https://www.cnblogs.com/yuanchenqi/articles/7652353.html 1,复习上级课,一对一,一对多,多对多的使用 models.py: cla ...
- JS前端调用后台方法
//JS前端代码function Exportqmdltb() { var areavalue= GetQmdltmValue(); $.ajax({ type: "post", ...
- ArcCore重构-Platform_Types.h实现辨析
AUTOSAR定义了一系列PlatformTypes,如uint8/uint16/uint32等等基本类型. It contains all platform dependent types and ...
- Django REST framework+Vue 打造生鲜超市(十三)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- CSS中的背景、雪碧图、超链接的伪类样式
一.背景 1.背景颜色 background-color: red; 2.背景图片 background-image: url("../../img/l1.png"); 3.图片填 ...
- python字符串基本编码
综述:python中字符串分为字节字符和非字节字符python3中默认输入字符串以非字节字符编码,使用unicode字符集表示,可以使用encode方法转化为ascii,utf-8, utf-16等各 ...