首页 > 其他分享 >《如 何 速 通 一 套 题》 10.0

《如 何 速 通 一 套 题》 10.0

时间:2024-10-03 21:33:54浏览次数:7  
标签:10.0 cnt int sum DFS st dp

邮寄

菜到不能再菜的 hhc 一个题都不会,光速撤退了。

A

nm 没想到只要 \(S\) 中有一种数出现了奇数次 C 必胜。

然后直接 xorhash 就可以了。

#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;

struct node {
  int v, w;
};

int t, n, u, v, w, d[500050], ans;
vector<node> to[500050];
map<int, int> cnt;

int qpow(int x, int y) {
  int rs = 1;
  for(; y; y >>= 1) {
    if(y & 1) {
      rs *= x;
    }
    x *= x;
  }
  return rs;
}

void DFS(int x = 1, int pa = 0) {
  cnt[d[x]]++;
  for(auto i : to[x]) {
    if(i.v != pa) {
      d[i.v] = d[x] ^ qpow(11451, i.w);
      DFS(i.v, x);
    }
  }
}

signed main() {
  freopen("game.in", "r", stdin);
  freopen("game.out", "w", stdout);
  for(cin >> t; t--; ) {
    cin >> n;
    for(int i = 1; i < n; i++) {
      cin >> u >> v >> w;
      to[u].push_back({v, w});
      to[v].push_back({u, w});
    }
    DFS();
    ans = n * (n - 1) / 2;
    for(auto i : cnt) {
      ans -= i.second * (i.second - 1) / 2;
    }
    cout << ans << '\n';
    for(int i = 1; i <= n; i++) {
      to[i].clear();
      d[i] = 0;
    }
    cnt.clear();
  }
  return 0;
}

B 跳跃

我们充分发挥人类智慧,猜测答案一定会在前 \(5000\) 轮内更新完。

直接暴力 dp 即可。

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

const int kInf = 1e17;

int t, n, k, dp[1010], arr[1010], sum[1010], ml[1010], mr[1010];

signed main() {
  freopen("jump.in", "r", stdin);
  freopen("jump.out", "w", stdout);
  for(cin >> t; t--; ) {
    cin >> n >> k;
    for(int i = 1; i <= n; i++) {
      cin >> arr[i];
      sum[i] = sum[i - 1] + arr[i];
    }
    int m = 0;
    for(int i = 1; i <= n; i++) {
      ml[i] = sum[i] - m;
      m = min(m, sum[i]);
    }
    m = -kInf;
    for(int i = n; i >= 1; i--) {
      m = max(m, sum[i]);
      mr[i] = m - sum[i - 1];
    }
    fill(dp + 1, dp + n + 1, -kInf);
    dp[1] = 0;
    int ans = 0;
    for(int i = 1; i <= min(k, 5000ll); i++) {
      if(i & 1) {
        int mx = -kInf;
        for(int j = 1; j <= n; j++) {
          mx = max(mx, dp[j] - sum[j - 1]);
          dp[j] = mx + sum[j];
          if(dp[j] < 0) {
            dp[j] = -kInf;
          }
          ans = max(ans, dp[j] + (k - i) * ml[j]);
        }
      }else {
        int mx = -kInf;
        for(int j = n; j >= 1; j--) {
          mx = max(mx, dp[j] + sum[j]);
          dp[j] = mx - sum[j - 1];
          if(dp[j] < 0) {
            dp[j] = -kInf;
          }
          ans = max(ans, dp[j] + (k - i) * mr[j]);
        }
      }
    }
    cout << ans << '\n';
  }
  return 0;
}

C 大陆

可以观察到每一个省要么是一个连通块,要么加上一个省会后变成连通块。

所以我们 DFS,并且启发式合并维护每一个点上还没有分好省的节点的集合(开一个 set),并在集合大小 \(\ge B\) 时把 set 里面的所有节点全部分为一个省,省会为当前节点。

可以证明这样一定可以构造出来(省大小 \(\le 2 * B\))。

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

int n, k, u, v, fs[10010], cnt, bel[10010];
vector<int> to[10010], ps[10010];
set<int> st[10010];

void trigger(int x) {
  if(st[x].size() >= k) {
    cnt++;
    for(auto i : st[x]) {
      //ps[cnt].push_back(i);
      bel[i] = cnt;
    }
    fs[cnt] = x;
    st[x].clear();
  }
}

void DFS(int x = 1, int pa = 0) {
  for(auto i : to[x]) {
    if(i != pa) {
      DFS(i, x);
      if(st[x].size() < st[i].size()) {
        swap(st[x], st[i]);
      }
      for(auto j : st[i]) {
        st[x].insert(j);
      }
      st[i].clear();
      trigger(x);
    }
  }
  st[x].insert(x);
  trigger(x);
}

int main() {
  freopen("mainland.in", "r", stdin);
  freopen("mainland.out", "w", stdout);
  cin >> n >> k;
  for(int i = 1; i < n; i++) {
    cin >> u >> v;
    to[u].push_back(v);
    to[v].push_back(u);
  }
  DFS();
  cout << cnt << '\n';
  for(int i = 1; i <= n; i++) {
    cout << bel[i] << ' ';
  }
  cout << '\n';
  for(int i = 1; i <= cnt; i++) {
    cout << fs[i] << ' ';
  }
  cout << '\n';
  return 0;
}

标签:10.0,cnt,int,sum,DFS,st,dp
From: https://www.cnblogs.com/leavenothingafterblog/p/18446032/speedrunv10

相关文章

  • 论文总结1--基于深度强化学习的四足机器人步态分析--2024.10.01
    四足机器人的运动控制方法研究1.传统运动控制-基于模型的控制方法  目前,在四足机器人研究领域内应用最广泛的控制方法就是基于模型的控制方法,其中主要包括基于虚拟模型控制(VirtualModelControl,VMC)方法、基于零力矩点(ZeroMomentPoint,ZMP)的控制方法、弹簧负载倒立摆算法......
  • T20天正建筑V10.0图文安装教程及下载
    T20天正建筑V10.0是一款基于AutoCAD平台的建筑设计软件,针对中国建筑设计规范进行优化和开发。以下是T20天正建筑V10.0的一些主要新功能和改进:支持AutoCAD新版本:完全支持AutoCAD2021及更新版本,提升了兼容性和运行效率。界面优化:用户界面进行了更新,简化操作流程,使得工具和功......
  • Android 10.0 Launcher3禁止改变density等系统密度导致布局变化hotseat靠右边显示功能
    1.前言在10.0的系统rom定制化开发中,在进行launcher3的定制化功能中,在有些项目修改系统密度density的值,以后导致launcher3的布局变乱,hotseat布局成一行竖屏显示看的很不美观,接下来就看如何分析解析禁止density改变导致布局变动的功能分析2.Launcher3禁止改变density等系统密......
  • Android 10.0 mtk平板camera2横屏预览旋转90度横屏保存录像旋转90度功能实现
    1.前言在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,点击录像保存的视频依然是竖屏的,所以说同样需要将视频也保存为横屏视频了,所以就需......
  • Android 10.0 锁屏页面忘记锁屏密码情况下点击5次解锁图标弹出锁屏密码功能实现
    1.前言在10.0的系统ROM定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求在锁屏密码页面在忘记解锁密码的情况下......
  • Android10.0 人脸解锁流程分析
    人脸解锁概述人脸解锁即用户通过注视设备的正面方便地解锁手机或平板。Android10为支持人脸解锁的设备在人脸认证期间添加了一个新的可以安全处理相机帧、保持隐私与安全的人脸认证栈的支持,也为安全合规地启用集成交易的应用(网上银行或其他服务)提供了一种容易实现的方式......
  • Android 10.0 Launcher3从首页开始安装app功能实现
    1.前言 在10.0的系统rom定制化开发中,在进行Launcher3的某些功能开发实现过程中,在某些项目中,安装的app比较多,要求在launcher3的首页开始安装app应用,接下来就需要分析下app安装图标排序的流程,然后在实现相关的功能2.Launcher3从首页开始安装app功能实现的核心类packages/a......
  • Android10.0 最近任务Recents功能分析
    在Android10.0上,Recents功能分布在SystemUI和Launcher3里面集成.一.初始化跟Android8.1类似,先看初始化入口:1.Recents.javaRecents继承SystemUI,进程启动后会在Dependency里面通过@Inject进行初始化,然后在SystemUIService里面调用SystemUIApplication的startServicesIfNee......
  • Android 10.0 SystemUI下拉状态栏QSTileView去掉着色效果显示彩色图标功能实现
    1.前言在10.0的系统rom定制化开发中,在关于SystemUI的下拉状态栏中QSTileView的背景颜色设置过程中,在由于系统原生有着色效果,导致现在某些彩色背景显示不是很清楚效果不好,所以需要去掉QSTileView的默认着色背景显示原生的彩色背景,接下来就来实现相关功能如图: 2.SystemUI......
  • stable-diffusion-webui-1.10.0 安装
    1.下载webui源码地址:https://github.com/AUTOMATIC1111/stable-diffusion-webuiclone或者下载压缩包解压。 2.启动双击 stable-diffusion-webui-1.10.0\webui-user.bat文件会下载pytorch,下载速度很慢,可以复制链接 https://download.pytorch.org/whl/cu121/torch-......