题目链接

loj#2071. 「JSOI2016」最佳团体

题解

树形dp强行01分规

代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define gc getchar()
  5. #define pc putchar
  6. inline int read() {
  7. int x = 0,f = 1;
  8. char c = gc;
  9. while(c < '0' || c > '9') c = gc;
  10. while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
  11. return x * f;
  12. }
  13. void print(int x) {
  14. if(x < 0) {
  15. pc('-');
  16. x = -x;
  17. }
  18. if(x >= 10) print(x / 10);
  19. pc(x % 10 + '0') ;
  20. }
  21. #define eps 1e-3
  22. const int maxn = 2505;
  23. struct node {
  24. int next,v;
  25. } edge[maxn << 1];
  26. int head[maxn], num = 0;
  27. void add_edge(int x,int v) {
  28. edge[++ num].v = v;
  29. edge[num].next = head[x];
  30. head[x] = num;
  31. }
  32. int n,k ;
  33. double ans = -1.000;
  34. int s[maxn],p[maxn],siz[maxn];
  35. double val[maxn];
  36. double dp[maxn][maxn];
  37. double tmp[maxn];
  38. void dfs(int x,int fa) {
  39. siz[x] = 0;
  40. dp[x][0] = 0.0;
  41. for(int i = head[x];i;i = edge[i].next) {
  42. int v = edge[i].v;
  43. if(v == fa) continue;
  44. dfs(v,x);
  45. for(int j = 0;j <= siz[x] + siz[v];++ j) tmp[j] = -74123423432.123;
  46. for(int j = 0;j <= siz[x];++ j) {
  47. for(int k = 0;k <= siz[v]; ++ k) {
  48. tmp[k + j] = std::max(tmp[k + j], dp[x][j] + dp[v][k]);
  49. }
  50. }
  51. siz[x] += siz[v];
  52. for(int i = 0;i <= siz[x];++ i) dp[x][i] = tmp[i];
  53. }
  54. ++ siz[x];
  55. for(int i = siz[x];i >= 1;-- i) dp[x][i] = dp[x][i - 1] + val[x];
  56. }
  57. bool check(double mid) {
  58. for(int i = 0;i <= n;++ i)
  59. val[i] = 1.0 * p[i] - 1.0 * mid * s[i];
  60. dfs(0,0);
  61. return dp[0][k + 1] >= 0.0;
  62. }
  63. int main() {
  64. //freopen("team0.in","r",stdin);
  65. k = read(),n = read();
  66. for(int fa,i = 1;i <= n;++ i) {
  67. s[i] = read(),p[i] = read(),fa = read();
  68. add_edge(fa,i); add_edge(i,fa);
  69. }
  70. double l = 0,r = 1000.0;
  71. int cnt = 30 ;
  72. while(cnt --) {
  73. double mid = (r + l) / 2.0;
  74. if(check(mid)) ans = mid,l = mid;
  75. else r = mid;
  76. }
  77. printf ("%.3lf\n",l);
  78. return 0;
  79. }
  80. /*
  81. 1 2
  82. 1000 1 0
  83. 1 1000 1
  84. */

loj#2071. 「JSOI2016」最佳团体的更多相关文章

  1. 【LOJ】#2071. 「JSOI2016」最佳团体

    题解 01分数规划,二分加树背包-- 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putch ...

  2. loj2071 「JSOI2016」最佳团体

    分数规划+树形依赖背包orz #include <iostream> #include <cstring> #include <cstdio> #include & ...

  3. loj#2076. 「JSOI2016」炸弹攻击 模拟退火

    目录 题目链接 题解 代码 题目链接 loj#2076. 「JSOI2016」炸弹攻击 题解 模拟退火 退火时,由于答案比较小,但是温度比较高 所以在算exp时最好把相差的点数乘以一个常数让选取更差的 ...

  4. [LOJ 2082] 「JSOI2016」炸弹攻击 2

    [LOJ 2082] 「JSOI2016」炸弹攻击 2 链接 链接 题解 枚举发射源,将发射源当做原点,对敌人和激光塔极角排序. 由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在 \(\pi\ ...

  5. LOJ#2082. 「JSOI2016」炸弹攻击 2(计算几何+双指针)

    题面 传送门 题解 我们枚举一下发射源,并把敌人和激光塔按极角排序,那么一组合法解就是两个极角之差不超过\(\pi\)且中间有敌人的三元组数,预处理一下前缀和然后用双指针就行了 //minamoto ...

  6. LOJ#2076. 「JSOI2016」炸弹攻击(模拟退火)

    题面 传送门 题解 退火就好了 记得因为答案比较小,但是温度比较高,所以在算\(\exp\)的时候最好把相差的点数乘上一个常数来让选取更劣解的概率降低 话虽如此然而我自己打的退火答案永远是\(0\)- ...

  7. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  9. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

随机推荐

  1. TeamCity 和 Nexus 的使用

    参考:http://www.jianshu.com/p/255a484555d9 TeamCity 安装部署(Linux 环境) 在我讲之前,如果你英文还可以,就到官网这里看下: Installati ...

  2. LOJ 3089: 洛谷 P5319: 「BJOI2019」奥术神杖

    题目传送门:LOJ #3089. 题意简述: 有一个长度为 \(n\) 的母串,其中某些位置已固定,另一些位置可以任意填. 同时给定 \(m\) 个小串,第 \(i\) 个为 \(S_i\),所有位置 ...

  3. WPF复制异常问题(OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)))

    最近在维护WPF系统的时候发现的问题,刚刚开始自己的电脑都不能重现,后面写日志跟踪才发现问题的所在.问题主要是由于:1.   在程序访问剪切板的时候,有其他程序正在占用剪切板,导致自己的程序无法访问, ...

  4. Mean shift

    转载:http://blog.csdn.net/google19890102/article/details/51030884 然后引入opencv中的pyrMeanShiftFiltering函数: ...

  5. 扫AR

  6. ActiveMQ 入门Nodejs版

    ActiveMQ 入门下载与安装 官方下载地址 解压,运行bin/win[32|64]/activemq[.bat] 启动服务 环境信息 控制台: http://localhost:8161 默认端口 ...

  7. CentOS 6.5使用Corosync + pacemaker实现httpd服务的高可用

    Corosync:它属于OpenAIS(开放式应用接口规范)中的一个项目corosync一版本中本身不具备投票功能,到了corosync 2.0之后引入了votequorum子系统也具备了投票功能了, ...

  8. ubuntu git hub 建立仓库

    https://www.cnblogs.com/woider/p/6533709.html 1.安装git apt-get install git 2.配置 Git 用户信息 把用户名和邮箱换成你自己 ...

  9. python接口自动化测试十六:unittest完成用例

    import unittestimport requests def add(a, b): print('前置条件!!!!!:如登录') return a + b class TestAAA(unit ...

  10. MVC4 下DropDownList使用方法(转)

    与MVC3相比,差别很大: 表现形式一: public ActionResult Main() { List<SelectListItem> items = new List<Sel ...