CF816E,奇技淫巧的复杂度分析
来源:互联网 发布:vb控制台应用程序 编辑:程序博客网 时间:2024/05/29 17:38
传送门
这题作为E题考场上我想了会,然后觉得D题可以找规律更可做,规律找到一半C题被hack了,事后A题fst,C题发现是一个字符打错了,我太菜了
这题利用了求反函数这一常见的技巧,可是我并没有第一时刻就反应过来。
然后,这题用了些奇技淫巧的复杂度分析->题解,其证明大意是考虑根节点真是丧心病狂
#include<bits/stdc++.h>using namespace std;const int N=5010;typedef long long ll;int n,i,xb;vector<int> e[N];ll f[N][N],a[N],b[N],m,x,dfn[N],sz[N];void dfs(int x,int fa){ sz[x]=1; int j,k,y,z; ll s=0; dfn[z=++xb]=a[x]; unsigned int i; f[x][1]=b[x]; for(i=0;i<e[x].size();++i){ y=e[x][i]; if(y!=fa){ dfs(y,x); for(j=sz[x];j>=1;--j) for(k=1;k<=sz[y];++k) if(!f[x][j+k] || f[x][j]+f[y][k]<f[x][j+k])f[x][j+k]=f[x][j]+f[y][k]; sz[x]+=sz[y]; } } sort(dfn+z,dfn+xb+1); for(j=z;j<=xb;++j){ s+=dfn[j]; if(!f[x][j-z+1] || s<f[x][j-z+1])f[x][j-z+1]=s; }}int main(){ cin>>n>>m; for(i=1;i<=n;++i){ cin>>a[i]>>b[i]; b[i]=a[i]-b[i]; if(i>1)cin>>x,e[x].push_back(i); } dfs(1,0); for(i=1;i<=n;++i)if(f[1][i]>m)break; cout<<i-1<<endl; return 0;}
阅读全文
0 0
- CF816E,奇技淫巧的复杂度分析
- 时间复杂度的分析
- 时间复杂度的分析
- 算法的复杂度分析
- 关于php的奇技淫巧
- Android Studio的奇技淫巧
- C++的一个奇技淫巧
- 数据库备份的奇技淫巧
- AndroidStudio的那些奇技淫巧
- git命令的奇技淫巧
- Git的奇技淫巧
- linux渗透的奇技淫巧
- C/C++的奇技淫巧
- C语言的奇技淫巧
- VB6的一个奇技淫巧
- Git的奇技淫巧
- c++的奇技淫巧
- 递归函数的复杂度分析
- c++动态内存的管理
- solr-7 近实时搜索和实时搜索
- 显示锁
- 批量微信过滤开通软件 微信开通过滤
- fastJson json转对象时发生异常
- CF816E,奇技淫巧的复杂度分析
- 【妄言之言】致二十四岁的自己
- css导航栏
- 浏览器对象模型BOM总结
- 计算几何——多边形 计算几何误差修正
- 正则表达式-非捕获性分组
- tomcat启动闪退
- linux常用操作-1.获得帮助,使用man page
- 批量微信过滤软件 开通微信号码筛选