cogs2039树的统计 x
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的更多相关文章
- BZOJ 1036: [ZJOI2008]树的统计Count [树链剖分]【学习笔记】
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 14302 Solved: 5779[Submit ...
- bzoj1036 [ZJOI2008]树的统计Count
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MB Submit: 12646 Solved: 5085 [Subm ...
- BZOJ 1036: [ZJOI2008]树的统计Count
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MB Submit: 14354 Solved: 5802 [Subm ...
- 【BZOJ1036】[ZJOI2008]树的统计Count 树链剖分
[BZOJ1036][ZJOI2008]树的统计Count Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. ...
- BZOJ-1036 树的统计Count 链剖线段树(模板)=(树链剖分+线段树)
潇爷昨天刚刚讲完...感觉得还可以...对着模板打了个模板...还是不喜欢用指针.... 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Lim ...
- C++之路进阶——codevs2460(树的统计)
2460 树的统计 2008年省队选拔赛浙江 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一棵树上有n个节 ...
- BZOJ 1036 树的统计-树链剖分
[ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 12904 Solved: 5191[Submit][Status ...
- BZOJ_1036_[ZJOI2008]_树的统计Conut_(树链剖分)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1036 给出一棵树以及各点的权值,对数进行如下三种操作: 1.改变某一节点u的值为t; 2.求节 ...
- bzoj 1036 [ZJOI2008]树的统计Count(树链剖分,线段树)
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 10677 Solved: 4313[Submit ...
随机推荐
- Python学习【day04】- Python基础(集合、函数)
集合 #!/usr/bin/env python # -*- coding:utf8 -*- # set集合 只可放不可变的数据类型,本身是可变数据类型,无序 # s = {1,2,3,[1,2,3] ...
- 创建Maven Web项目时很慢解决办法
点击加号,Name输入archetypeCatalog,Value输入internal archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,loc ...
- # ACM奇淫技巧
目录 ACM奇淫技巧 差分操作 坐标旋转 ACM 卡常优化 vsc代码块(头文件模板) 读入输出优化 逗号表达式 内联函数inline 寄存器变量register 条件判断加减代替取模 自增运算符优化 ...
- c++学习笔记之类和对象(一、类定义)
类和对象是 C++ 的重要特性,它们使得 C++ 成为面向对象的编程语言. 类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量:创建对象的过程也叫类的实例化.每个对象都是类的一个 ...
- HTML5网页文档结构
2.1 Web标准 Web标准,使得Web开发更加容易.Web标准由万维网联盟(W3C)制定. 2.1.1 Web标准概述 Web标准的最终目的就是保证每个人都有权力访问相同 ...
- [转载]C++STL—vector的插入与删除
来源:https://blog.csdn.net/duan19920101/article/details/50717748 vector::erase():从指定容器删除指定位置的元素或某段范围内的 ...
- 主流浏览器内核(IE、Chrome、Firefox、Safari、Opera)
IE浏览器,使用Trident浏览器内核,又称为IE内核.只用于Windows平台,而且并不是开源的: chrome浏览器,目前使用的是Blink浏览器内核.浏览器内核的演进过程:Chromium ...
- vue组件之事件
自定义事件 通过prop属性,父组件可以向子组件传递数据,而子组件的自定义事件就是用来将内部的数据报告给父组件的. <div id="app3"> <my-com ...
- Mybatis常见面试题总结
1.#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. ...
- Linux服务之httpd基本配置详解
一.基本介绍 1.版本 httpd-1.3 httpd-2.0 httpd-2.2 httpd-2.4 目前为止最新的版本是httpd-2.4.6,但是这里我用的是系统自带的RPM包安装的httpd- ...