C. Friends

题意

对于任一点,求到此点距离不超过6的节点数。

分析

第一次dfs,形成一个以 1 为根的有向树,设 down[i][j] 为以i为根节点,距离 i 点距离不超过 j 的节点数(这些节点都是 i 的子孙节点)

第二次dfs,设 up[i][j] 以 i 为起点,距离 i 点距离不超过 j 的非子孙节点的个数,可根据 down 求得。

code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int INF = 1e9;
const int MAXN = 1e5 + 10; int up[MAXN][10], down[MAXN][10];
vector<int> G[MAXN];
void dfs1(int pre, int u)
{
down[u][0] = 1;
for(int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == pre) continue;
dfs1(u, v);
for(int j = 1; j <= 6; j++) down[u][j] += down[v][j - 1];
}
}
void dfs2(int pre, int u)
{
up[u][0] = 1;
if(u != pre) for(int i = 1; i <= 6; i++)
up[u][i] += up[pre][i - 1] + down[pre][i - 1] - down[u][i > 2 ? i - 2 : 0];
for(int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(v != pre) dfs2(u, v);
}
}
int main()
{
int T, c = 1;
scanf("%d", &T);
while(T--)
{
int n;
scanf("%d", &n);
for(int i = 0; i <= n; i++) G[i].clear();
memset(up, 0, sizeof up);
memset(down, 0, sizeof down);
for(int i = 0; i < n - 1; i++)
{
int x, y;
scanf("%d%d", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
}
dfs1(1, 1); dfs2(1, 1);
printf("Case #%d:\n", c++);
for(int i = 1; i <= n; i++)
{
int res = 0;
for(int j = 1; j <= 6; j++) res += up[i][j] + down[i][j];
printf("%d\n", res);
}
}
return 0;
}

随机推荐

  1. PHP7中我们应该学习会用的新特性

    PHP7于2015年11月正式发布,本次更新可谓是PHP的重要里程碑,它将带来显著的性能改进和新特性,并对之前版本的一些特性进行改进.本文小编将和大家一起来了解探讨PHP7中的新特性. 1. 标量类型 ...

  2. jquery使用CSS3实现文字动画效果插件Textillate.js

    Textillate是一款基于jquery的使用CSS3实现文字动画的小巧插件.Textillate.js集成了一些很棒的使用CSS3动画效果的 JavaScript 库,您可非常轻轻松地把这些动画效 ...

  3. python字符串实战

    haproxy配置文件 思路:读一行,写一行 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defa ...

  4. collection and map and Collections

    两者的区别: 两者都是接口: Collectoin是java集合框架的一个顶级接口,存储的元素可以是任意类型的对象: Map是java集合框架的映射接口,以键值对的形式存储对象: 也就是说,colle ...

  5. 关于Integer与int

    integer a=new integer(1); integer b=new integer(1); int c=1; integer d=1; a==b  false因为地址不同: a==c  t ...

  6. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化

    本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...

  7. 【代码学习】PHP文件的上传和下载

    ===================== 文件上传和下载 ===================== 一.php.ini的配置信息 file_uploads = On /Off    是否允许文件上 ...

  8. C#控制台程序使用Log4net日志组件

    1.Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比如C#控制台程序和C# MVCWeb项目,拿控制台项目为例   项目源码在文章底部 2.首先创建一个控制台程序,引入Log4n ...

  9. sublime设置 快捷键(自动换行)

    一.菜单view > word wrap选上就好了 二.如果让编辑器默认是自动换行的话把它保存到配置中 Preference > Settings-User插入以下一行配置 "w ...

  10. hadoop配置文件的作用

    core-site.xml <property> //指定hdfs的主端口 namenode要放在哪台机器上 <name>fs.defaultFS</name> & ...