牛客练习赛32B Xor Path (树形dp)】的更多相关文章

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵n个点的树,每个点有权值.定义表示  到  的最短路径上,所有点的点权异或和. 对于,求所有的异或和. 输入描述: 第一行一个整数n. 接下来n-1行,每行2个整数u,v,表示u,v之间有一条边. 第n+1行有n个整数,表示每个点的权值. 输出描述: 输出一个整数,表示所有 的异或和,其中 . 输入例子: 4 1 2 1 3 1 4…
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 "你已经是一个成熟的孩子了,要学会自己烹饪了!" 小 Y 上山拜师学艺,经过 年之长的厨艺练习,已成为当世名厨,今天他接受邀请,在众人面前展示自己高超的厨艺. 人们给小 Y 提供了 种食物,每种食物无限量供…
链接:https://ac.nowcoder.com/acm/contest/180/B 来源:牛客网 烟花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 小a有nn个烟花,每个烟花代表着互不相同的颜色,对于第ii个烟花,它有p_ip i ​ 的概率点燃,现在小a要去点燃它们,他想知道产生颜色的期望个数 及 产生恰好产生kk种颜色的概率 输入描述: 第一行…
题目链接:Xor Path 题意:每个顶点的点权为Ai,任意两点路径上点权异或和为Path(i,j),求所有Path(i,j)和. 题解:考虑每个顶点被用到的次数,分以下三种情况: 1.本身和其他顶点:n-1 2.该顶点上面的顶点(k)和下面的顶点(m)通过该点进行连接:k*m 3.该顶底下面的顶点通过该点进行连接(上面顶点不用的原因是:从上层层下来,已经记录过.):任意两个子树个数相乘之和. 第三种情况直接算会超时,我们需要优化一下,考虑下如果子树个数为偶数相当于没有贡献,所以只要考虑子树个数…
筱玛的字符串 思路 :dp [ i ] [ j ] [ 3 ] 分别代表到第 i 位时 左括号比右括号多 j ,后面有三个状态 分别表示当前位置 S3的字符 是正在反转的,还是 反转完成的,还是没有反转的, 根据提议要求 反转的只能是一段连续区间,然后转移即可. 注意 反转完成之后 不能再开始一段新的反转过程 . #include<bits/stdc++.h> using namespace std; #define mod 1000000007 #define ll long long #d…
xor序列 思路:线性基 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long #define mp make_pair #define pb push_…
先缩环建树, 对于树上个环$x,y$, 假设$x,y$路径上有$cnt$个环(不包括$x,y$), 贡献就为$2^{cnt}$. 这题卡常挺严重的, 刚开始用并查集合并竟然T了. #include <iostream> #include <algorithm> #include <cstdio> #include <queue> #define REP(i,a,n) for(int i=a;i<=n;++i) #define pb push_back…
题目链接 题目大意 要你求出有多少个长度为n的排列满足m个限制条件 第i个限制条件 p[i]表示前 p[i]个数不能是1-p[i]的排列 题目思路 这个感觉是dp但是不知道怎么dp 首先就是要明白如果不满足1-p[i]为全排列,那么前p[i]个数必定有大于p[i]的数 那么就可以设\(dp[i][j]为前i个数中最大值为j的个数\) 最后的答案就是\(dp[n][n]\) 他这个的限制条件其实就是使得\(dp[p[i]][p[i]]=0\) 代码 #include<set> #include&…
题目链接 题目大意 给你一个长为n(n<=5e3)的数组a.随机使得k个元素增加d.要你求多大的概率使得,这些数组元素的相对大小不发生改变 输出 n 行每行一个整数,第 i 行的整数表示 k=i 时的答案 题目思路 看了题解觉得是一个不太难的dp,但有点难想到 令\(dp[i][j][1]\) 表示为前i个元素有j个增加k,并且第i个元素加了k 令\(dp[i][j][0]\) 表示为前i个元素有j个增加k,并且第i个元素吗没有加k 然后转移即可 代码 #include<set> #in…
题意:RT 题解:先对\(p\)排个序,然后设\(dp[i]\)表示前\(i-1\)个\(p[i]\)满足条件但是\(p[i]\)不满足,即在\([1,p[i]]\)中不存在从\(p[1]\)到\(p[i-1]\)[的排列,比如说\(p[1]=1\),\(p[2]=2\),\(p[3]=3\),则\(dp[4]\)中一定不能存在\([1,x,x,x](p[1])\),\([1,2,x,x](p[2])\),\([1,2,3,x]\)这样的序列,因为这些对于\(p[1]\)到\(p[i-1]\)存…