CF161D Distance in Tree(点分治)】的更多相关文章

题目: 输入点数为N一棵树,求树上长度恰好为K的路径个数 分析: 题目的数据范围不是很紧,点分治也可以过,树形dp也可以过.这里采用点分治做法. 我们只需要单开一个类似于桶的数组,跑点分治套路,统计即可,每次处理一棵子树,先在桶上跑统计,处理完一棵子树再更新桶.这样可以保证每一段路径都直接跨过根节点内. 记得开long long. 代码: #include<bits/stdc++.h> #define ll long long using namespace std; ,M=; ]; ,q[N…
CF161D Distance in Tree LG传送门 长链剖分板子题. 长链剖分那么好写,跑得又快,为什么要写点分治呢?完了我现在看一道点分治题就想写长链剖分 如果还不会长链剖分请看我博客. 没什么好说的,时空复杂度\(O(n)\)直接洛谷rank1. #include<cstdio> #include<cctype> #define R register #define I inline using namespace std; const int S=50003,N=10…
Prime Distance On Tree Problem description. You are given a tree. If we select 2 distinct nodes uniformly at random, what's the probability that the distance between these 2 nodes is a prime number? Input The first line contains a number N: the numbe…
点分治是一种处理树的优秀暴力 这是一道板子题 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int u[50010<<1],v[50010<<1],fir[50010],nxt[50010<<1],cnt,root,sz[50010],f[50010],middis[50010],midcnt,n,k,vis[50010],…
正解:点分治 解题报告: 传送门1! 传送门2! 传送门3! 点分治板子有点多,,,分开写题解的话就显得很空旷,不写又不太好毕竟初学还是要多写下题解便于理解 于是灵巧发挥压行选手习惯,开始压题解(bushi 不扯辣,按顺序港下这几道题QwQ T1 就港两个方面趴,一个是怎么找重心一个是怎么分治 对于怎么找重心,直接dfs,然后记录每个子树的size,因为重心的定义是sizemaxmin,所以存一下sizemax然后比较一下就好了 然后怎么分治呢 根据点分治的定义,我们就是以重心为根然后分开治理各…
题意:求树上距离为k的点对个数: 解题关键:练习一下点分治不用容斥 而直接做的做法.注意先查询,后更新. 不过这个方法有个缺陷,每次以一个新节点为根,必须memset mp数组,或许使用map会好些,更新序号一类用ca这种形式更好些. 试了一下,map更慢,应该是带log的原因. 点分治解法: #pragma comment(linker,"/STACK:102400000,102400000") #include<cstdio> #include<cstring&g…
Problem Distance in tree 题目大意 给出一棵树,求这棵树上有多少个最短距离为k的点对. Solution 这个题目可以用点分治来做,然而我到现在还是没有学会点分治,所以只好用树形dp了. 这个题目,我们可以将其转化为一个个子树中搞事情,再慢慢合并. 设f[i][j]为以i为根的子树中距离根距离为j的点有多少个. 对于一个点u,我们枚举它的子节点v,则我们可以计算出经过u-v这条边的答案 我们枚举j=1->k,则ans+=f[u][j]*f[v][k-j-1]; 枚举完以后…
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsmemory limit per test 512 megabytes 问题描述 A tree is a connected graph that doesn't contain any cycles. The distance between two vertices of a tree is th…
[CF161.D] Distance in Tree time limit per test 3 seconds memory limit per test 512 megabytes A tree is a connected graph that doesn't contain any cycles. The distance between two vertices of a tree is the length (in edges) of the shortest path betwee…
题目链接 Distance in Tree $k <= 500$ 这个条件十分重要. 设$f[i][j]$为以$i$为子树,所有后代中相对深度为$j$的结点个数. 状态转移的时候,一个结点的信息由他的儿子转移过来. 那么一边进行状态转移,一边统计答案即可. #include <bits/stdc++.h> using namespace std; ][], deep[]; vector <]; int n, k, x, y; long long ans; void dfs(int…