题目链接 Bear and Tree Jumps

考虑树形DP。$c(i, j)$表示$i$最少加上多少后能被$j$整除。

在这里我们要算出所有$c(i, k)$的和。

其中$i$代表每个点对的距离,$k$为输入的$k$值。

$f[i][j]$表示以$i$为根结点,深度对$k$取模为$j$的点的个数。

状态转移时$f[x][i]$一边更新一边和刚刚计算出的$f[u][j]$统计答案。

具体细节可以看代码。

 #include <bits/stdc++.h>

 using namespace std;

 #define rep(i, a, b)    for (int i(a); i <= (b); ++i)

 const int N = ;
int n, k;
long long sum[N], f[N][], ans = ;
vector <int> v[N]; void dfs(int x, int fa, int dep){
f[x][dep % k] = sum[x] = ; //初始化
for (auto u : v[x]){
if (u == fa) continue;
dfs(u, x, dep + );
rep(i, , k - ) rep(j, , k - ){
int dis = ((i + j) % k - ((dep * ) % k) + k) % k;
int t = ( * k - dis) % k;
ans += t * f[x][i] * f[u][j]; //这一步求出要被k整除则还需补多少的总和 (1)
} rep(i, , k - ) f[x][i] += f[u][i];
sum[x] += sum[u];
ans += (n - sum[u]) * sum[u]; //若没有(1)则这一步求的是树上所有点两两距离和 (2)
}
} int main(){ scanf("%d%d", &n, &k);
rep(i, , n - ){
int x, y;
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
} dfs(, , );
printf("%lld\n", ans / k); //最后除以k
return ;
}

Codeforces 791D Bear and Tree Jump(树形DP)的更多相关文章

  1. Codefoces 791D. Bear and Tree Jumps 树形DP

    D. Bear and Tree Jumps   A tree is an undirected connected graph without cycles. The distance betwee ...

  2. CodeForces 771C Bear and Tree Jumps 树形DP

    题意: 给出一棵树,一个人可以在树上跳,每次最多跳\(k(1 \leq k \leq 5)\)个点 定义\(f(s,t)\)为从顶点\(s\)跳到顶点\(t\)最少需要跳多少次 求\(\sum\lim ...

  3. Educational Codeforces Round 67 E.Tree Painting (树形dp)

    题目链接 题意:给你一棵无根树,每次你可以选择一个点从白点变成黑点(除第一个点外别的点都要和黑点相邻),变成黑点后可以获得一个权值(白点组成连通块的大小) 问怎么使权值最大 思路:首先,一但根确定了, ...

  4. CodeForces 161D Distance in Tree【树形DP】

    <题目链接> 题目大意:一颗无向无环树,有n个顶点,求其中距离为k的点对数是多少,(u,v)与(v,u)为同一点对. #include <cstdio> #include &l ...

  5. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)

    题目链接 D. Appleman and Tree time limit per test :2 seconds memory limit per test: 256 megabytes input ...

  6. Codeforces 804D Expected diameter of a tree(树形DP+期望)

    [题目链接] http://codeforces.com/contest/804/problem/D [题目大意] 给你一个森林,每次询问给出u,v, 从u所在连通块中随机选出一个点与v所在连通块中随 ...

  7. codeforces 161 D. Distance in Tree(树形dp)

    题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...

  8. Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)

    题目链接 题意:给你一个有根树,假设有k个叶子节点,你可以给每个叶子节点编个号,要求编号不重复且在1-k以内.然后根据节点的max,minmax,minmax,min信息更新节点的值,要求根节点的值最 ...

  9. HDU5834 Magic boy Bi Luo with his excited tree(树形DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5834 Description Bi Luo is a magic boy, he also ...

随机推荐

  1. Special Segments of Permutation - CodeForces - 1156E (笛卡尔树上的启发式合并)

    题意 给定一个全排列\(a\). 定义子区间\([l,r]\),当且仅当\(a_l + a_r = Max[l,r]\). 求\(a\)序列中子区间的个数. 题解 笛卡尔树上的启发式合并. \(200 ...

  2. Python linecache模块

    Table of Contents 1. linecache 1.1. 其它 2. 参考资料 linecache 今天分享一个python的小模块: linecache, 可以用它方便地获取某一文件某 ...

  3. 关于tree节点的刷新

    1.刷新节点分为刷新整个树和刷新指定节点 (1)刷新整个树 $("#tree").tree("reload"); (2)刷新指定节点(方法:传入需要刷新节点的父 ...

  4. AutoMapper教程

    http://www.cnblogs.com/gc2013/p/4487567.html http://www.qeefee.com/article/automapper

  5. C#环境下使用Windows消息传递字符串数据的研究

    前言: 日前,师兄交给了我一个课题,将一个后台运行的Console程序,修改为WindowsForm程序,并在其界面上增加配置设置,以及运行记录。 原来的Console程序,后台运行的流程在其中一个类 ...

  6. Python+Selenium框架设计篇之-什么是自动化测试框架

    1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式.平台执行脚 ...

  7. Python-S9-Day127-Scrapy爬虫框架2

    01 今日内容概要 02 内容回顾:爬虫 03 内容回顾:并发和网络 04 Scrapy框架:起始请求定制 05 Scrapy框架:深度和优先级 06 Scrapy框架:内置代理 07 Scrapy框 ...

  8. Excel的数据批量替换

    该篇文章照抄自:http://www.cnblogs.com/xwgli/p/5845317.html 在 Excel 中使用正则表达式进行查找与替换  在 Excel 中,使用 Alt+F11 快捷 ...

  9. caffe-dnnh实验

    下面是我在做基于深度哈希的大规模图像检索中的一个实验,相关文档介绍给大家,具体内容查看提供的相关链接,总结的很到位了,我就不再赘述. 实践cvpr2015年的深度哈希图像检索论文:Simultaneo ...

  10. java BigDecimal工具类

    package com.core.calculate; import java.math.BigDecimal; import java.text.DecimalFormat; /** * Creat ...