2039. 树的统计

★★   输入文件:counttree.in   输出文件:counttree.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

关于树的统计问题有多种多样的版本,这里你需要解决一个比较简单的问题:对于一棵包含N个节点的有根树,将所有点从1到N编号后,对于每一个节点v,统计出以v为根的子树中有多少个点的编号比v小。

【输入格式】

输入第一行包含一个整数N,以下N行每行包含一个整数,其中第i行的整数表示编号为i的节点的父亲节点的编号,根的父亲节点编号为0。

【输出格式】

输出包含N行,其中第i行给出编号为i的节点的统计结果。

【样例输入】

3

2

3

0

【样例输出】

0 1 2

【提示】

在此键入。

【来源】

20%的数据1<=n<=1000

100%的数据1<=n<=100000

思路:

  就是用搜索w

T代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>
#include <string>
#include <cstdio> using namespace std; inline int reads()
{
int x=,f=;
char ch=getchar(); while(ch>'' || ch<'')
{
if(ch=='-') f=-;
ch=getchar();
} while(ch>='' && ch<='')
{
x=x*+ch-'';
ch=getchar();
} return x*f;
} const int Ms = 1e5 + ;
int n,root;
int dad[Ms];
bool Vss[Ms];
int sum[Ms];
int deep[Ms];
int h[Ms],num;
queue<int>q; struct AC{
int to,next;
}t[Ms]; void ADD(int x,int y)
{
t[++num].to=y;
t[num].next=h[x];
h[x]=num;
} int ans; void dfs(int u)
{ ///dfs the deep
Vss[u]=true;
int maxx=;
for(int j=h[u];j;j=t[j].next)
{
int v=t[j].to;
if(Vss[v]) continue;
deep[v]=deep[u]+; ///update
dad[v]=u; ///u is v's dad
dfs(v); ///continue dfs
if(sum[v] > sum[maxx]) maxx=v; ///update
sum[u]+=sum[v]+;
}
} void QwQ(int now)
{
ans=;
int nowdeep=deep[now];
for(int i=;i<now;i++)
{
// if(i==now) continue;
if(ans>=sum[now]) break;
if(deep[i]>nowdeep && ans<=sum[now])
{
if(dad[i]==now) ans++;
else
{
int j=dad[i];
while(deep[j] > deep[now])
{
j=dad[j];
if(j==now) ans++;
}
}
}
}
} int main()
{
freopen("counttree.in","r",stdin);
freopen("counttree.out","w",stdout);
n=reads();
int i=; ///fu chu zhi !!!
int QAQ;
int sss=n;
while(sss--)
{
///i's dad is dad[i]
QAQ=reads();
ADD(QAQ,i);
///find the root
if(QAQ==) root=i;
i++;
}
deep[root]=;
sum[]=-;
dfs(root);
for(int i=;i<=n;i++)
{
QwQ(i);
printf("%d\n",ans);
}
return ;
}

QAQ

A代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>
#include <string>
#include <cstdio> using namespace std; inline int reads()
{
int x=,f=;
char ch=getchar(); while(ch>'' || ch<'')
{
if(ch=='-') f=-;
ch=getchar();
} while(ch>='' && ch<='')
{
x=x*+ch-'';
ch=getchar();
} return x*f;
} const int Ms = 1e5 + ;
int n,root;
int now;
int h[Ms],num; struct AC{
int to,next;
}t[Ms]; void ADD(int x,int y)
{
t[++num].to=y;
t[num].next=h[x];
h[x]=num;
} int ans; void dfs(int u)
{
for(int j=h[u];j;j=t[j].next)
{
if(j<now) ++ans;
dfs(j); ///continue dfs
}
} int main()
{
freopen("counttree.in","r",stdin);
freopen("counttree.out","w",stdout);
n=reads();
int QAQ,sss=n,i=;
while(sss--)
{
///i's dad is dad[i]
QAQ=reads();
ADD(QAQ,i);
i++;
}
for(int i=;i<=n;++i)
{
now=i;
ans=;
dfs(i);
printf("%d\n",ans);
}
return ;
}

23333

cogs2039树的统计 x的更多相关文章

  1. BZOJ 1036: [ZJOI2008]树的统计Count [树链剖分]【学习笔记】

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 14302  Solved: 5779[Submit ...

  2. bzoj1036 [ZJOI2008]树的统计Count

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 12646  Solved: 5085 [Subm ...

  3. BZOJ 1036: [ZJOI2008]树的统计Count

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 14354  Solved: 5802 [Subm ...

  4. 【BZOJ1036】[ZJOI2008]树的统计Count 树链剖分

    [BZOJ1036][ZJOI2008]树的统计Count Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. ...

  5. BZOJ-1036 树的统计Count 链剖线段树(模板)=(树链剖分+线段树)

    潇爷昨天刚刚讲完...感觉得还可以...对着模板打了个模板...还是不喜欢用指针.... 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Lim ...

  6. C++之路进阶——codevs2460(树的统计)

    2460 树的统计 2008年省队选拔赛浙江  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description 一棵树上有n个节 ...

  7. BZOJ 1036 树的统计-树链剖分

    [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 12904 Solved: 5191[Submit][Status ...

  8. BZOJ_1036_[ZJOI2008]_树的统计Conut_(树链剖分)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1036 给出一棵树以及各点的权值,对数进行如下三种操作: 1.改变某一节点u的值为t; 2.求节 ...

  9. bzoj 1036 [ZJOI2008]树的统计Count(树链剖分,线段树)

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 10677  Solved: 4313[Submit ...

随机推荐

  1. CentOS7安装rabbitMQ,并实现浏览器访问

    第一.安装wget yum install wget 第二.下载erlang和rabbitmq-server的rpm (1)在/usr/local下创建目录rabbitMQ,并进入该目录 (2)下载 ...

  2. Codeforces 1209D Cow and Snacks

    题目大意 有 $n$ 个不同的糖果,从 $1$ 到 $n$ 编号.有 $k$ 个客人.要用糖果招待客人. 对于每个客人,这些糖果中恰有两个是其最爱.第 $i$ 个客人最爱的糖果编号是 $x_i$ 和 ...

  3. Java白皮书学习笔记+Head First Java--用于自我复习 基础知识篇

    本笔记是摘与Hava白皮书上面的内容,用来给自己做提醒的,因此大概并不适合Java的学习者作为笔记参考使用. 以我的水平现在还看不懂这个... 一.基础知识篇 1.常量 final关键字指示常量,只能 ...

  4. 2019中山纪念中学夏令营-Day19 数论初步【GCD(最大公约数),素数相关】

    关于GCD的一些定理或运用的学习: 1. 2.二进制算法求GCD 思想:使得最后的GCD没有2(提前把2提出来) 代码实现: #include <cstdio> #define int l ...

  5. 从入门到自闭之Python闭包

    闭包 定义:在嵌套函数内,使用(非本层变量)非全局变量就是闭包 闭包必须是内层函数对外层函数的变量(非全局变量)的引用 函数执行完毕后,函数体内的空间自行销毁 def func(): a=1 def ...

  6. mysql-1.1基础

    笔记内容:mysql基础,创建数据库,创建表,操作数据表,操作数据,简单查询,条件查询,排序,分组,聚合,连接查询(等值连接,内连接,外链接),子查询 自己提示:脑图笔记存于网盘中  右键:新标签页打 ...

  7. 平时工作使用到的idea快捷键或者技巧

    平时工作使用到的idea快捷键或者技巧 alt+enter 快速导入包 alt+insert 快速生成setter和getter ctrl+alt+l 格式化代码 /**然后回车 快速生成文档注释 a ...

  8. C语言typedef详解

    原文链接 C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称.数组类型名称.指针类型名称与用户自定义的结构型名称.共用型名称.枚举型名称等.一旦用户在 ...

  9. appium 自动化测试环境搭建

    最近再学习appium,把学习的过程记录下来,以防止到时候 换个电脑就不知道这么安装搭建appium环境了. 环境搭建: 0.JDK环境是必备的,这里大家自行百度,   1.安装 node 环境,前辈 ...

  10. 依赖注入 php

    依赖注入:将当前类依赖的对象,以参数的方式注入到当前类中,简称依赖注入 <?php class Mi { public function size() { return '5.99寸全面屏'; ...