首页 > 其他分享 >CF1988D The Omnipotent Monster Killer

CF1988D The Omnipotent Monster Killer

时间:2024-08-15 15:51:04浏览次数:16  
标签:suf Omnipotent min int CF1988D Killer mi res dp

luogu中文题面:https://www.luogu.com.cn/problem/CF1988D

树形dp。我们只关心子树的根节点v什么时候被删去。dp[u][i]+= min(dp[v][1...i-1,i+1...T]). T是log(n)的。
因为\(T\leq Mex(u)\), 而考虑要多少节点使\(Mex(u)=T\),有\(f_T = 1 + f_1 + ... f_{T-1}\)得\(T=log_2n\)

不会证明复杂度,所以T开大了。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 3e5 + 11;
LL dp[N][201], a[N], suf_mi[222], pre_mi[222];
int n;
vector<int> G[N];
void dfs(int u, int fa){
  dp[u][0] = 1e18;
  for(int i = 1;i <= 200; i++)dp[u][i] = 1ll * a[u] * i;
  for(int v : G[u]){
    if(v == fa)continue;
    dfs(v, u);
    pre_mi[0] = suf_mi[201] = 1e18;
    for(int i = 1;i <= 200; i++)pre_mi[i] = min(pre_mi[i-1], dp[v][i]);
    for(int i = 200;i >= 1; i--)suf_mi[i] = min(suf_mi[i+1], dp[v][i]);
    for(int i = 1;i <= 200; i++){
      LL res = 1e18;
      if(i > 1)res = pre_mi[i-1];
      if(i < 200)res = min(res, suf_mi[i+1]);
      dp[u][i] += res;
    }
  }
}
void work(){
  cin>>n;
  for(int i = 1;i <= n; i++){
    scanf("%lld", &a[i]);
    G[i].clear();
  }
  for(int i = 1;i < n; i++){
    int x, y;
    scanf("%d%d", &x, &y);
    G[x].push_back(y);
    G[y].push_back(x);
  }
  dfs(1, 1);
  LL res = 1e18;
  for(int i = 0;i <= 200; i++){
    res = min(res, dp[1][i]);
  }
  cout<<res<<endl;
}
int main(){
  int T;
  cin>>T;
  while(T--)work();
  return 0;
}

标签:suf,Omnipotent,min,int,CF1988D,Killer,mi,res,dp
From: https://www.cnblogs.com/dqk2003/p/18361103

相关文章

  • D. The Omnipotent Monster Killer
    D.TheOmnipotentMonsterKillerYou,themonsterkiller,wanttokillagroupofmonsters.Themonstersareonatreewith$n$vertices.Onvertexwithnumber$i$($1\lei\len$),thereisamonsterwith$a_i$attackpoints.Youwanttobattlewithmon......
  • BP插件暴破验证码实战流程(BP+captcha-killer-modified+ddddocr)
    含有速成版本+工具介绍及问题=保姆级版一、验证码破解流程:BP插件暴破实战流程如下:1、下载安装插件captcha-killer2、启动本地验证码识别服务ddddocr --codereg.py3、抓验证码的包,发送到插件4、配置识别服务模板5、抓登录的包,payload选插件,单线程本次使用到工具如下......
  • linux进程被杀掉日志,Linux进程突然被杀掉(OOM killer),查看系统日志
    Linux进程被杀掉(OOMkiller),查看系统日志基本概念:Linux内核有个机制叫OOMkiller(OutOfMemorykiller),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码......
  • 电脑技巧:推荐一款非常好用的文件重复清理工具DoubleKiller
    目录一、软件介绍二、功能介绍三、使用说明四、软件总结一、软件介绍DoubleKiller是一款专为用户解决重复文件问题而精心打造的小巧实用工具,安装包仅为1.2M。对于长期依赖电脑的工作者和电脑的职场人员来说,随着电脑使用时间的增长,电脑中难免会出现大量重复文件,这些......
  • Android 10.0 lowmemorykiller低内存时,禁止某个app被kill掉功能实现
    1.前言在10.0的系统定制化开发中,在对于系统lowmemorykiller低内存的时候,应用保活功能是非常重要的,就是在低内存的情况下禁止某个app被杀掉,所以就需要从lowmemorykiller机制入手,在杀进程的相关流程中进行分析来实现进程避免被杀掉,接下来就来实现这个功能2.lowmemorykiller低......
  • Linux进程被杀掉(OOM killer),查看系统日志
    基本概念:Linux内核有个机制叫OOMkiller(OutOfMemorykiller),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码linux/mm/oom_kill.c,当系统内存不足的时候,o......
  • 常见问题解决 --- 安卓12关闭phantom processes killer杀后台功能
    1.adb连接成功后,执行adbdevices2.执行adbshell3.执行device_configset_sync_disabled_for_testspersistentdevice_configputactivity_managermax_phantom_processes2147483647settingsputglobalsettings_enable_monitor_phantom_procsfalse......
  • kernel: mysqld invoked oom-killer: gfp_mask
    LinuxOOM-Killer:解释与代码示例引言当在运行中的Linux系统中内存不足时,操作系统会调用OOM-Killer(OutofMemoryKiller)来终止某些进程以释放内存。这通常发生在操作系统无法为新的进程或正在运行的进程分配所需的内存时。本文将介绍OOM-Killer的工作原理并提供相应的代码......
  • Windows All Killer
    代码大部分来自网络#include<iostream>#include<windows.h>#include<tlhelp32.h>#include<stdio.h>#include<aclapi.h>#include<bits/stdc++.h>usingnamespacestd;#defineNTMODEF1#defineZWMODEF0DWORDProtectProcess(void......
  • 用esp8266开发板制作WiFi Killer
    一、esp8266开发板获取【ESP8266串口wifi模块NodeMCULuaV3物联网开发板CH340】我是用的这个,某宝可购买,14元左右,这个是使用的CH340串口芯片的。还有一种在某宝上可以看到是使用的CP21x型号的芯片的,这里两种都可以的。二、安装驱动以自己的开发板上的串口芯片的型号为准,按需选......