[USACO 2017DEC] Barn Painting】的更多相关文章

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5141 [算法] 树形DP 时间复杂度 : O(N) [代码] #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ; ; struct edge { int to , nxt; } e[MAXN << ]; int n , k , tot; int color[MAXN] , hea…
题目描述 Farmer John has a large farm with NN barns (1 \le N \le 10^51≤N≤105 ), some of which are already painted and some not yet painted. Farmer John wants to paint these remaining barns so that all the barns are painted, but he only has three paint co…
题意 之后补. 分析 这题同样也很精巧.我们不妨思考一下,如果只允许用一块木板,那么要购买多少距离?是整个的距离吗?不是,是从第一个到最后一个(哈哈哈哈哈哈哈).但是,不包括第一个的"左边"和最后一个的"右边".只允许用两块的时候发生了什么变化?可以想见,最好的解是将最宽的那个间隔去掉.以此类推. 以这样的思路就可以得到题目的解法.问题在于各种各样的细节(again):样例数据里面给的牛棚按照顺序但是实际数据它未作保证:然后牛棚的距离记得-1,因为牛棚本身需要盖木板…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5139 [算法] 二分答案 时间复杂度 : O(NlogN^2) [代码] #include<bits/stdc++.h> using namespace std; ; int n; int a[MAXN] , b[MAXN]; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y);…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5142 [算法] 首先用RMQ预处理S数组的最大值 然后我们枚举右端点 , 通过二分求出合法的 , 最靠右的左端点 , 用这段区间的最大值更新答案 , 即可 时间复杂度 : O(NlogN) [代码] #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ; const LL INF = 1e18;…
题目链接 Solution 比较简单的树形 \(dp\) . \(f[i][j]\) 代表 \(i\) 为根的子树 ,\(i\) 涂 \(j\) 号颜色的方案数. 转移很显然 : \[f[i][1]=\prod(f[t][2]+f[t][3])\] 其中 \(k\) 代表它的子节点. 其他两种颜色以此类推. 但需要注意的是对于颜色固定的点,除固定的颜色外,其他两种颜色的方案要赋为 \(0\) . PS : 要开 longlong ,以及还要 mod 1000000007 . Code #incl…
设\(f[i][j]\)为\(i\)子树,当\(i\)为\(j\)时的方案数 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 1000005; const int mod = 1e+9+7; vector <int> g[N]; int vis[N],n,m,t1,t2,f[N][4],c[N]; void dfs(int p) { vis[p]=1; int fla…
数组越界那个RE+WA的姹紫嫣红的... 乘法原理求种类数,类似于没有上司的舞会. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(regi…
最近几天学了一下树形\(dp\) 其实早就学过了 来提高一下打开树形\(dp\)的姿势. 1.没有上司的晚会 我的人生第一道树形\(dp\),其实就是两种情况: \(dp[i][1]\)表示第i个人来时的最大人数 \(dp[i][0]\)表示第i个人不来时的最大人数 然后递归至叶子节点,倒推\(dp\) 状态转移方程: \[dp[root][1]+=dp[G[root][i]][0];\] \[dp[root][0]+=max(dp[G[root][i]][1],dp[G[root][i]][0…
P2324 [SCOI2005]骑士精神 CF724B Batch Sort CF460C Present CF482A Diverse Permutation CF425A Sereja and Swaps CF1187C Vasya And Array P3419 [POI2005]SAM-Toy Cars CF196C Paint Tree *Loj #6560 小奇取石子 *CodeChef - CLPERM POJ2689. Prime Distance P1792 [国家集训队]种树…