CF486D-Valid Sets】的更多相关文章

D. Valid Sets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/problem/D Description As you know, an undirected connected graph with n nodes and n - 1 edges is called a tree. You are given an integer d and a tree consist…
D. Valid Sets time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output As you know, an undirected connected graph with n nodes and n - 1 edges is called a tree. You are given an integer d and a tree…
题目链接 Valid Sets 题目要求我们在一棵树上计符合条件的连通块的个数. 满足该连通块内,点的权值极差小于等于d 树的点数满足 n <= 2000 首先我们先不管这个限制条件,也就是先考虑d为正无穷大的时候的情况. 我们要求出树上所有连通块的个数. 这个时候我们令f[i]为以i为根的子树中的连通块的数目. 此时状态转移方程为 f[x] = f[x] * (f[u] + 1) 其中f[x]初始值为1,u为x的儿子 最后f[1]的值(我们假设1为根结点)即为答案 时间复杂度为O(n) 注意到…
D. Valid Sets   As you know, an undirected connected graph with n nodes and n - 1 edges is called a tree. You are given an integer d and a tree consisting of n nodes. Each node i has a value ai associated with it. We call a set S of tree nodes valid …
D. Valid Sets time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output As you know, an undirected connected graph with n nodes and n - 1 edges is called a tree. You are given an integer d and a tree…
http://codeforces.com/contest/486/problem/D 题意:给定一棵树,点上有权值,以及d,要求有多少种联通块满足最大值减最小值小于等于d. 思路:枚举i作为最大的点权,然后dfs树规一下,就能得出以这个点为最大值的方案数,因为有权值相等的点,所以我们规定一下,只能从标号小的拓展到标号大的,就不会重复了. #include<algorithm> #include<cstdio> #include<cmath> #include<c…
题目链接:http://codeforces.com/problemset/problem/486/D 题意: 给你一棵树,n个节点,每个节点的点权为a[i]. 问你有多少个连通子图,使得子图中的max(a[i]) - min(a[i]) <= d. ps.连通子图的定义: 如果一个点集V为一个连通子图,则对于任意两点a,b∈V,有a到b路径上的所有点u∈V. 题解: 因为要保证max(a[i]) - min(a[i]) <= d,所以可以人为地选出一个点rt作为点权最大的点. 这样在求以rt…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给你一棵树. 让你统计其中子树T的数量. 这个子树T要满足最大值和最小值之差小于等于d 树形DP 可以枚举点root为子树的根. 统计以root为根的子树的个数. 根据每个儿子节点选或者不选. 如果选.则看看它是否满足以下条件: 权值小于等于根节点的权值. (等于根节点的时候,要求该节点的标号<根节点的标号,不然会重复计数) 然后假设当前是枚举的第i个儿子 那么cnt表示的是这个根节点和前i-1个节点能形成的满足子树(是一个联通…
题目链接:http://codeforces.com/contest/486/problem/D 题意:给出n个点,还有n-1条边的信息,问这些点共能构成几棵满足要求的树,构成树的条件是. 1)首先这颗树非空. 2)这些点必须是联通的. 3)这棵树上最大的权值-最小的权值<=d. 题解:一道明显的树形dp,所以一半就设dp[i]表示以i为根的能构成几棵树.为了方便起见.就将i设为最大的那个点.如果遇到val值相同的话,就定义一 个方向,当val值相同时只能从下表大的点到下表小的点.dfs写法如下…
二,RoundC import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.util.ArrayList; import java.util.…