对于一个食物网(一个DAG),一个物种死亡后,某些物种就必然死亡,求出必然死亡的是那些物种。

灭绝树的另一种含义是:“灭绝树跟节点到节点u的路径上的节点由那些原图中从根节点到节点u的所有路径中都经过了的点“。

 /**************************************************************
Problem: 2815
User: idy002
Language: C++
Result: Accepted
Time:424 ms
Memory:14036 kb
****************************************************************/ #include <cstdio>
#include <vector>
#define maxn 65544
#define maxp 17
using namespace std; int n;
vector<int> g[maxn], vg[maxn], gg[maxn];
int indgr[maxn], topo[maxn], topo_cnt;
int anc[maxn][maxp+], depth[maxn];
int siz[maxn]; void make_topo() {
vector<int> stk;
for( int i=; i<=n; i++ )
if( indgr[i]== ) stk.push_back(i);
while( !stk.empty() ) {
int u = stk.back();
topo[++topo_cnt] = u;
stk.pop_back();
for( int t=; t<g[u].size(); t++ ) {
int v = g[u][t];
indgr[v]--;
if( indgr[v]== ) stk.push_back(v);
}
}
} int lca( int u, int v ) {
if( depth[u]<depth[v] ) swap(u,v);
int t = depth[u]-depth[v];
for( int i=; t; t>>=,i++ )
if( t& ) u=anc[u][i];
if( u==v ) return u;
for( int p=maxp; p>=&&anc[u][]!=anc[v][]; p-- )
if( anc[u][p]!=anc[v][p] ) u=anc[u][p], v=anc[v][p];
return anc[u][];
} void dfs( int u ) {
siz[u] = ;
for( int t=; t<gg[u].size(); t++ ) {
int v = gg[u][t];
dfs(v);
siz[u] += siz[v];
}
} void work() {
make_topo();
for( int i=; i<=n; i++ ) {
anc[i][] = i;
depth[i] = ;
}
for( int i=; i<=n; i++ ) {
int u = topo[i];
if( vg[u].size()== ) continue;
int ca = vg[u][];
for( int t=; t<vg[u].size(); t++ ) {
int v = vg[u][t];
ca = lca(ca,v);
}
gg[ca].push_back(u);
anc[u][] = ca;
depth[u] = depth[ca]+;
for( int p=; p<=maxp; p++ )
anc[u][p] = anc[anc[u][p-]][p-];
}
dfs(n);
for( int i=; i<=n-; i++ )
printf( "%d\n", siz[i]- );
} int main() {
scanf( "%d", &n );
for( int v=,u; v<=n; v++ ) {
while() {
scanf( "%d", &u );
if( u== ) break;
g[u].push_back(v);
vg[v].push_back(u);
indgr[v]++;
}
}
for( int u=; u<=n; u++ )
if( indgr[u]== ) {
g[n+].push_back(u);
vg[u].push_back(n+);
indgr[u]++;
}
n++;
work();
}

bzoj 2815 灭绝树的更多相关文章

  1. bzoj 2815 [ZJOI2012]灾难(构造,树形DP)

    [题意] 求把每个点删除后,不可达点的数目. [思路] 构造一棵“灭绝树”,要求这棵树满足如果删除根节点后则该子树内的所有结点都不可达.则答案为子树大小-1. 如何构造这棵“灭绝树”? 将原图拓扑排序 ...

  2. 灾难 bzoj 2815

    灾难(1s 128MB)catas [样例输入] 5 0 1 0 1 0 2 3 0 2 0 [样例输出] 4 1 0 0 0 题解: 主要算法:拓扑排序:最近公共祖先(Lca): 先跑出拓扑序 我们 ...

  3. BZOJ 2815: [ZJOI2012]灾难

    呃,题面没了,大概就是给出一些生物之间的捕食关系,求灭绝树每个点的灾难值. 拓扑排序之后倒着加入点,动态维护fa[][]数组,倍增法求LCA,当然大佬愿意写动态树也是极好的…… #include &l ...

  4. BZOJ 2243 染色 | 树链剖分模板题进阶版

    BZOJ 2243 染色 | 树链剖分模板题进阶版 这道题呢~就是个带区间修改的树链剖分~ 如何区间修改?跟树链剖分的区间询问一个道理,再加上线段树的区间修改就好了. 这道题要注意的是,无论是线段树上 ...

  5. BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)

    BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...

  6. codeforces 757F - 最短路DAG+灭绝树

    Description 给定一个n个点,m条边的带权无向图,和起点S.请你选择一个点u(u!=S),使得在图中删掉点u 后,有尽可能多的点到S的最短距离改变. Solution 先建出最短路DAG,在 ...

  7. [BZOJ 4771]七彩树(可持久化线段树+树上差分)

    [BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i] ...

  8. bzoj 2815 灾难

    首先假设我们定义x灭绝后y会灭绝,那么离y最近的x就为y的父亲节点,那么如果我们可以求出每个节点的父亲节点,我们就得到了一棵树,然后每个节点的灾难值就是子树的大小-1. 我们将出度数为0的节点的父亲节 ...

  9. BZOJ 3531(树链剖分+线段树)

    Problem 旅行 (BZOJ 3531) 题目大意 给定一颗树,树上的每个点有两个权值(x,y). 要求维护4种操作: 操作1:更改某个点的权值x. 操作2:更改某个点的权值y. 操作3:求a-- ...

随机推荐

  1. Django中的MiddleWare中间件

    1. middleware简介 Django的middleware的概念相当于SSH框架里面的filter的概念.中间键的作用就是对所有的request,在request前,和在response后做一 ...

  2. vim 颜色主题设置

    先看看vim编辑器提供的色彩配置方案: 首先进入vim的color目录(/usr/share/vim/vim74/colors,不同的系统目录不同,建议在-/建立.vim目录,然后在些目录里建立对应的 ...

  3. Three.js基础探寻五——正二十面体、圆环面等

    除了立方体.平面.球体,Three.js还提供了很多其他几何形状. 1.圆形 CircleGeometry可以创建圆形或者扇形: THREE.CircleGeometry(radius, segmen ...

  4. python selenium登陆网易云音乐

    from selenium import webdriver import time driver=webdriver.Chrome() driver.get("http://music.1 ...

  5. IO的学习与使用

    一.IO的学习方法:IO中包含了很多的类,推荐的学习方式是:“举一反三,掌握一种,以此类推”. 二.I/O操作的目标: 输入:从数据源(在数据源和程序之间建立的一个数据流淌的“管道”)中读取数据(文件 ...

  6. Oracle安装出现报错

    报错信息如下: >>> Couldnot execute auto check for display colors using command /usr/bin/xdpyinfo. ...

  7. 看看PHP迭代器的内部执行过程

    class myIterator implements Iterator { private $position = 0; private $array = array( "first_el ...

  8. 20165301 预备作业二:学习基础和C语言基础调查

    <做中学>读后感及C语言学习调查 读<做中学>有感 娄老师在文章中多次提到「做中学(Learning By Doing)」的概念,并通过娄老师自己的减肥经历.五笔练习经历.乒乓 ...

  9. webpack编译时No PostCSS Config的解决方法

    1. { loader:"postcss-loader", options: { // 如果没有options这个选项将会报错 No PostCSS Config found pl ...

  10. js自动检索输入文章长度

    1. 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...