首页 > 其他分享 >GYM 105264 E

GYM 105264 E

时间:2024-09-08 21:53:21浏览次数:13  
标签:cnt int GYM back dep MAXN ans 105264

题目描述

给定一个 \(N\) 个点的树,你要从中选出一个大小为 \(k\) 的子树出来,求这个子树的最小直径。

思路

由于此题允许 \(O(N^2)\) 的时间复杂度,所以考虑枚举子树的中心。

接着以该中心为根向下搜出深度为 \(i\) 的结点数 \(cnt_i\),接着枚举直径长度除 \(2\)。由于这里直径可能长度为偶数,则此时中点在一条边上。所以我们把每条边也看作一个点(但不统计在 \(cnt\) 中)。找到第一个 \(\sum \limits_{i=0}^x cnt_i \ge k\) 的 \(x\),并统计答案即可。

空间复杂度 \(O(N)\),时间复杂度 \(O(N^2)\)。

代码

#include<bits/stdc++.h>
using namespace std;

const int MAXN = 2001;

int n, k, dep[MAXN], cnt[MAXN], ans;
vector<int> e[MAXN];

void dfs(int u, int fa) {
  dep[u] = dep[fa] + 1;
  cnt[dep[u]] += (u <= n);
  for(int v : e[u]) {
    if(v != fa) {
      dfs(v, u);
    }
  }
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> k;
  for(int i = 1, u, v; i < n; ++i) {
    cin >> u >> v;
    e[u].push_back(n + i);
    e[n + i].push_back(v);
    e[v].push_back(n + i);
    e[n + i].push_back(u);
  }
  ans = 2 * n;
  for(int i = 1; i < 2 * n; ++i) {
    for(int j = 1; j <= 2 * n; ++j) {
      dep[j] = cnt[j] = 0;
    }
    dfs(i, 0);
    int res = 0;
    for(int j = 1; j <= 2 * n; ++j) {
      res += cnt[j];
      if(res >= k) {
        ans = min(ans, j);
        break;
      }
    }
  }
  cout << ans;
  return 0;
}

标签:cnt,int,GYM,back,dep,MAXN,ans,105264
From: https://www.cnblogs.com/yaosicheng124/p/18403574

相关文章

  • GYM 105264 C
    题目描述给定一个长度为\(N\)的数组\(A\),每次你可以令\(A_i\leftarrowA_i+1\)或\(A_i-1\)。求进行至多\(k\)次操作后\(A\)中最少不同元素数量。思路首先对\(A\)进行排序。令\(dp_{i,j}\)表示考虑前\(i\)个数,有\(j\)个不同的值时最多还能剩余几次操作。很......
  • OpenAI Gym custom environment: Discrete observation space with real values
    题意:OpenAIGym自定义环境:具有实数值的离散观测空间问题背景:Iwouldliketocreatecustomopenaigymenvironmentthathasdiscretestatespace,butwithfloatvalues.Tobemoreprecise,itshouldbearangeofvalueswith0.25step:10.0,10.25,10.5,10......
  • Start OpenAI gym on arbitrary initial state
    题意:“在任意初始状态下启动OpenAIGym”问题背景:AnybodyknowsanyOpenAIGymenvironmentswherewecansettheinitialstateofthegame?Forexample,IfoundtheMountainCarContinuous-v0candosuchthingsothatwecanselectatwhichpointthecarst......
  • gym创建环境、自定义gym环境
    环境:half_cheetah.pyfromosimportpathimportnumpyasnpfromgymnasiumimportutilsfromgymnasium.envs.mujocoimportMujocoEnvfromgymnasium.spacesimportBoxDEFAULT_CAMERA_CONFIG={"distance":4.0,}classMOHalfCheetahEnv(Mujoc......
  • gym序列化、EzPickle类
    EzPickle是一个用于强化学习环境的类,它重写了__getstate__和__setstate__方法,以便通过构造函数参数(*args,**kwargs)进行序列化和反序列化。这个设计允许那些无法直接用pickle库处理的对象,如数据库连接和网络套接字,也能在保存和恢复时保持其状态。"""Classforpicklingandun......
  • mujoco gymnasium 环境
    本文简要介绍gynasium中基于mujoco的环境搭建。参照gynasium.envs.mujoco。1.gynasium.Env简介在gynasium中,环境基类为gynasium.Env,其中定义了step,reset,render,close等方法以及action_space,observation_space,reward_range,spec,metadata,np_random......
  • Why unwrap an openAI gym?
    题意:为什么要“解开”OpenAIGym?问题背景:I'mtryingtogetsomeinsightsintoreinforcementlearningwhileusingopenAIgymasalearningenvironment.Idothisbyreadingthebook Hands-onreinforcementlearningwithPython.Inthisbook,somecodeisp......
  • Gym102788,B - Rectangles题解
    水水水~题目链接戳我分析首先根据题目条件可得式子=>\((x-2)(y-2)=n(2x+2y-4)\)化简式子可得\[\begin{align}(x-2)(y-2)=&n(2x+2y-4)\\xy-2x-2y+4=&2nx+2ny-4n\\x(y-2n-2)=&2ny-4n-4+2y\\x=&\frac{2ny-4n-4......
  • Isaacgym使用操作指南
    Isaacgym使用操作指南背景知识1.**高性能GPU加速**2.**多环境并行仿真**3.**深度学习框架集成**4.**物理引擎**5.**强化学习支持**6.**PythonAPI**7.**应用场景**8.**生态系统**总结常用apiisaacgym库主要常用的api设置仿真参数创建底面平面加载资产创建环境......
  • gym105167E Erdős-Ginzburg-Ziv 题解
    题意:给\(p\)和\(p-1\)个边权,要用这些边权构造树,每个点编号\(0\simp-1\),使得每个点\(u\)到\(0\)的距离\(\bmod\p=u\),无解输出-1,保证\(p\)是质数、\(p\le10^6\)、边权\(\in[1..p-1]\).Solution考虑加边的过程,树最开始只有根节点0,然后通过加边不断地引入新的点......