BZOJ5290 [Hnoi2018]道路


前言

这道题目我竟然没有在去年省选切?

我太菜了.

Solution

对题面进行一个语文透彻解析,发现这是一个二叉树,乡村都是叶子节点,城市都有两个儿子.(依据在下)

那么就可以树形dp了.我们假设公路是左儿子,铁路是右儿子.

\(dp_{i,j,k}\)表示到了\(i\)节点,经过了\(j\)条未翻修的公路,经过了\(k\)条未翻修的铁路.

考虑对于不同的\(i\)怎么计算.

  1. 叶子节点,直接计算贡献即可.

  2. 非叶子节点,考虑要么不翻修公路,要么不翻修铁路,直接从左右儿子的两种情况转移就好了.

具体的转移方程参考代码.

代码实现

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<math.h>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<set>
  8. #include<map>
  9. #include<iostream>
  10. using namespace std;
  11. #define ll long long
  12. #define re register
  13. #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
  14. inline int gi()
  15. {
  16. int f=1,sum=0;char ch=getchar();
  17. while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  18. while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
  19. return f*sum;
  20. }
  21. const int N=40010;
  22. ll dp[510][41][41];
  23. int son[N][2],c[N<<1],b[N<<1],a[N<<1],n,id[N<<1],sta[N<<1],tot,top;
  24. void dfs(int u,int x,int y)
  25. {
  26. int p=id[u]=top?sta[top--]:++tot;
  27. if(!son[u][0])
  28. {
  29. for(int i=0;i<=x;i++)
  30. for(int j=0;j<=y;j++)
  31. dp[p][i][j]=1ll*c[u]*(a[u]+i)*(b[u]+j);
  32. return;
  33. }
  34. dfs(son[u][0],x+1,y);dfs(son[u][1],x,y+1);
  35. int ls=id[son[u][0]],rs=id[son[u][1]];
  36. for(int i=0;i<=x;i++)
  37. for(int j=0;j<=y;j++)
  38. dp[p][i][j]=min(dp[ls][i][j]+dp[rs][i][j+1],dp[ls][i+1][j]+dp[rs][i][j]);
  39. sta[++top]=ls;sta[++top]=rs;//重复利用了.
  40. }
  41. int main()
  42. {
  43. n=gi();
  44. for(int i=1;i<n;i++)
  45. {
  46. int s=gi(),t=gi();
  47. if(s<0)s=-s+n-1;
  48. if(t<0)t=-t+n-1;
  49. son[i][0]=s;son[i][1]=t;
  50. }
  51. for(int i=n;i<=n+n-1;i++)
  52. a[i]=gi(),b[i]=gi(),c[i]=gi();
  53. dfs(1,0,0);
  54. printf("%lld\n",dp[1][0][0]);
  55. return 0;
  56. }

【BZOJ5290】 [Hnoi2018]道路的更多相关文章

  1. [BZOJ5290][HNOI2018]道路

    bzoj luogu sol 考场上普及\(dp\)都做不来,果然是思想僵化了. 设\(f[u][i][j]\)表示在\(u\)点,上方有\(i\)条未修复的公路和\(j\)条未修复的铁路的最小花费. ...

  2. 5290: [Hnoi2018]道路

    5290: [Hnoi2018]道路 链接 分析: 注意题目中说每个城市翻新一条连向它的公路或者铁路,所以两种情况分别转移一下即可. 注意压一下空间,最后的叶子节点不要要访问,空间少了一半. 代码: ...

  3. [HNOI2018]道路 --- 树形DP

    [HNOI2018]道路 题目描述: W 国的交通呈一棵树的形状.W 国一共有 \(n-1\) 个城市和 \(n\) 个乡村, 其中城市从 \(1\) 到 \(n-1\) 编号,乡村从 \(1\) 到 ...

  4. 【BZOJ5290】[HNOI2018]道路(动态规划)

    [BZOJ5290][HNOI2018]道路(动态规划) 题面 BZOJ 洛谷 题目直接到洛谷上看吧 题解 开始写写今年省选的题目 考场上我写了一个模拟退火骗了\(90\)分...然而重测后只剩下45 ...

  5. bzoj 5290: [Hnoi2018]道路

    Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ...

  6. [HNOI2018]道路(DP)

    题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1 个城市和nnn 个乡村,其中城市从111 到n−1n - 1n−1 编号,乡村从111 到nnn 编号,且111 号城市是首都 ...

  7. 洛谷4438 [Hnoi2018]道路 【树形dp】

    题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ...

  8. [洛谷P4438] HNOI2018 道路

    问题描述 W 国的交通呈一棵树的形状.W 国一共有n - 1个城市和n个乡村,其中城市从1到n - 1 编号,乡村从1到n编号,且1号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网 ...

  9. BZOJ.5290.[AHOI/HNOI2018]道路(树形DP)

    BZOJ LOJ 洛谷 老年退役选手,都写不出普及提高DP= = 在儿子那统计贡献,不是在父亲那统计啊!!!(这样的话不写这个提高DP写记忆化都能过= =) 然后就令\(f[x][a][b]\)表示在 ...

随机推荐

  1. js实现环形菜单效果

    点击中间的圆点,会弹出环形菜单,效果图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF- ...

  2. tomcat+servlet例子

    在C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\app\WEB-INF文件夹下建立文件夹classes. 在C:\Pro ...

  3. Git及其二次开发

    Git And TFS: 将 Visual Studio 用于 Git:http://msdn.microsoft.com/zh-cn/library/hh850437.aspx TFVC 和 Git ...

  4. TFS SDK

    vs2013 已包含. 可参考 TFS SDK: Connecting to TFS 2010 & TFS 2012 Programmatically http://geekswithblog ...

  5. HYSBZ - 3676

    模板题.问你一个串里最大的值(回文子串*出现次数) /* gyt Live up to every day */ #include<cstdio> #include<cmath> ...

  6. 2019.02.09 codeforces gym 100548F. Color(容斥原理)

    传送门 题意简述:对n个排成一排的物品涂色,有m种颜色可选. 要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数.(n,m≤1e9,k≤1e6n,m\le1e9,k\le1e6n,m≤ ...

  7. 2018.10.24 NOIP模拟 小 C 的数组(二分+dp)

    传送门 考试自己yyyyyy的乱搞的没过大样例二分+dp二分+dp二分+dp过了606060把我自己都吓到了! 这么说来乱搞跟被卡常的正解比只少101010分? 那我考场不打其他暴力想正解血亏啊. 正 ...

  8. 本地导入/导出远程oracle数据库

    1.导出数据库 exp 用户名/密码@远程服务器IP:数据端口号/实例名 file=存储dmp文件的路径 full=y; 2.导入数据库 imp 用户名/密码@远程服务器IP:数据库端口号/实例名 f ...

  9. Eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上

    打开Eclipse,单击“Window”菜单,选择下方的“Preferences”. 单击“Server”选项,选择下方的“Runtime Environments”.  点击“Add”添加Tomca ...

  10. VS2013利用ajax访问不了json文件——VS2013配置webconfig识别json文件

    这两天用VS2013开发工具来访问json文件,老是报404文件,我根据网上来设置IIS添加MIME重启IIS和VS2013还是失败,无法访问json文件,但是奇怪的是可以访问txt文件 查询了很多方 ...