AcWing
Prgl
这个作者很懒,什么都没留下…
展开
-
AcWing 207. 球形空间产生器
传送门思路: 设球心坐标为(x1,x2,...,xn),有,由此我们可以列出N+1个二次方程,我们可以对前后两个方程做差,来得到N个一次方程,同时可以消掉常数C,那么我们就可以直接采用高斯消元,解出圆心的坐标。代码:#include<bits/stdc++.h>#include<unordered_map>using namespace std;typedef long long LL;typedef unsigned long lon...原创 2021-10-29 20:32:52 · 113 阅读 · 0 评论 -
AcWing 324. 贿赂FIPA
思路:先由附庸关系建树,额外建一个花费为0的节点为树根。考虑树形DP,设dp[i][j]为在以i为根的子树中,得到不少于j张票的最小花费。于是可以从每个子节点向根节点转移,参考分组背包的转移方式,设当前节点为v,子节点为u,size[v]为以v为根的子树大小,开始处理v时dp[v][0]=0,其余dp[v][i]=inf,于是可以得到dp[v][j]=min{dp[v][j-k]+dp[u][k]}(j<=size[v],k<=size[u],j>=k)。此外还要注意,因为...原创 2021-10-24 17:54:23 · 119 阅读 · 0 评论 -
AcWing 325. 计算机
传送门题目大意:一棵无根树,每条边有一个距离,求每个顶点到距离其最远的顶点的距离。思路:考虑树形DP+换根。令D[x]x到以x为根的子树当中的最长距离,d[x]为次长距离,U[x]为x向上走的最长距离,F[x]为x的答案。第一次dfs以1为根可以很容易求出D[x]与d[x]。之后第二次dfs对每个顶点去求最终的答案。令p为父节点,v为当前节点,l为p到v的距离,于是有F[x]=max(D[x],U[x])对于D[p] == D[v] + l的情况,说明p向下的最长距离原创 2021-10-26 21:48:06 · 91 阅读 · 0 评论 -
AcWing 288. 休息时间
传送门思路:考虑DP,设dp[i][j][1]为牛在前小时休息j个小时且第i个小时休息时,回复的最多体力;dp[i][j][0]为牛在前小时休息j个小时且第i个小时没有休息时,回复的最多体力。可以把问题分为两部分,首先考虑当牛不能跨天休息时,在第一个小时休息必然无法恢复体力,有dp[1][1][1]=0,dp[i][0][0]=0,其他皆初始为-inf。于是有dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]),dp[i][j][1]=max(dp[i-1原创 2021-10-28 19:47:05 · 115 阅读 · 0 评论 -
AcWing 289. 环路运输
传送门思路:一个环路上的问题,考虑拆环为链然后复制一倍接在后面。那么对于Ai与Aj,不妨设j<i,如果i-j>N/2则两者距离在新的链上就是i-j,而如果i-j<=N/2那么两者之间的距离就是j+N-i=N-(i-j),而这个值<=N/2,所以二者的距离在新的链上一定不超过N/2。设新的链上两个物品为Ax与Ay,设y<x,可能的答案为Ax+Ay+x-y=Ax+x+Ay-y,所以我们可以枚举x,用单调队列维护一下Ay-y,其在队列内单调递减,就可以求出答案了。代.原创 2021-10-28 21:57:12 · 163 阅读 · 0 评论