首页 > 其他分享 >Solution Set【2024.1.27】

Solution Set【2024.1.27】

时间:2024-01-27 19:11:39浏览次数:26  
标签:std 2024.1 Set min ++ valueType times 27 Factor

CF1778F Maximizing Root

首先不难证明不操作根节点一定不优,因此我们考虑操作根节点的情况。

现在我们的问题转化为了:最大化操作根节点前的整个树的节点权值的最大公约数。

由于可能的最大公约数值只有 \(\mathcal{O}(\sqrt{V})\) 种。因此我们考虑将其压入状态进行动态规划。

设 \(f_{u, j}\) 表示使得 \(u\) 子树内的所有节点点权和根节点点权最大公约数为 \(j\) 的最小操作次数。转移时枚举子树的最大公约数即可,复杂度为 \(\mathcal{O}(n \sqrt{V}^2) = \mathcal{O}(nV)\),可以通过。

Code
#include <bits/stdc++.h>

typedef long long valueType;
typedef std::vector<valueType> ValueVector;
typedef std::vector<ValueVector> ValueMatrix;
typedef std::unordered_map<valueType, valueType> ValueMap;

constexpr valueType MAX = std::numeric_limits<valueType>::max() >> 20;

valueType N, K;
ValueVector Factor, A;
ValueMap Map;
ValueMatrix G, F;

void calc(valueType x, valueType from) {
    for (auto const &to : G[x]) {
        if (to == from)
            continue;

        calc(to, x);

        for (valueType i = 0; i < Factor.size(); ++i) {
            valueType min = MAX;

            for (valueType j = i; j < Factor.size(); ++j)
                if (Factor[j] % Factor[i] == 0)
                    min = std::min(min, F[to][j]);

            F[x][i] += min;
        }
    }

    for (valueType i = 0; i < Factor.size() && from > 0; ++i) {
        if (A[x] % Factor[i] != 0)
            F[x][i] = MAX;
    }

    for (valueType i = Factor.size() - 1; i >= 0 && from > 0; --i) {
        valueType const power = Map[std::__gcd(A[1], Factor[i] * Factor[i])];

        F[x][power] = std::min(F[x][power], F[x][i] + 1);
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    valueType T;

    std::cin >> T;

    for (valueType testcase = 0; testcase < T; ++testcase) {
        Factor.clear();
        A.clear();
        Map.clear();
        G.clear();
        F.clear();

        std::cin >> N >> K;

        A.resize(N + 1, 0);

        for (valueType i = 1; i <= N; ++i)
            std::cin >> A[i];

        for (valueType i = 1; i * i <= A[1]; ++i) {
            if (A[1] % i == 0) {
                Factor.push_back(i);

                Factor.push_back(A[1] / i);
            }
        }

        std::sort(Factor.begin(), Factor.end());
        Factor.erase(std::unique(Factor.begin(), Factor.end()), Factor.end());

        for (valueType i = 0; i < Factor.size(); ++i)
            Map[Factor[i]] = i;

        G.resize(N + 1);
        F.resize(N + 1, ValueVector(Factor.size(), 0));

        for (valueType i = 1; i < N; ++i) {
            valueType u, v;

            std::cin >> u >> v;

            G[u].push_back(v);
            G[v].push_back(u);
        }

        calc(1, 0);

        valueType ans = 1;

        for (valueType i = 0; i < Factor.size(); ++i)
            if (F[1][i] < K)
                ans = std::max(ans, Factor[i]);

        ans *= A[1];

        std::cout << ans << std::endl;
    }

    return 0;
}

[GDKOI2023 提高组] 矩阵

对于判定问题我们考虑考察其必要条件并进行随机化判定。

不难发现,对于矩阵 \(A, B, C\),若其满足

\[A \times B = C \]

那么对于任意 \(1 \times n\) 的向量 \(x\),其一定满足

\[x \times A \times B = x \times C \]

这样我们可以在 \(\mathcal{O}(n^2)\) 的时间内进行一次判定,下面估计其正确率。

发现实际上我们需要判定的是 \(A \times B - C\) 后得到的矩阵是否均为 \(0\),记其为 \(D\),那么我们通过向量 \(x\) 实际判定的是 \(x \times D\) 得到的向量是否均为 \(0\)。不妨假设 \(D\) 中存在非 \(0\) 的位置,即其为 \(\left(x, y\right)\),那么在我们先在 \(x\) 中除了 \(\left(1, x\right)\) 以外的其他值,那么可以发现,若那个空位在 \(\left[0, 998244353\right)\) 内随机生成,那么 \(x \times D\) 中的 \(\left(1, y\right)\) 的取值也取遍 \(\left[0, 998244353\right)\),因此该做法的错误率不超过 \(\frac{1}{998244353}\),可以接受。

标签:std,2024.1,Set,min,++,valueType,times,27,Factor
From: https://www.cnblogs.com/User-Unauthorized/p/-/2024-1-27

相关文章

  • 1.27
    2update.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>修改旅游费</title><linkrel="stylesheet"href="../Style.css"></head><s......
  • 1.27学习进度
    1.jieba库可以对中文进行分词2.由于yarn是集群运行,executor可以在所有服务器上执行,所以每个服务器都需要有哦jieba库提供支撑3.如何尽量提高任务计算的资源计算cpu核心和内存量,通过–executor-memory指定executor内存,通过–executor-cores指定executor的核心通过—num-executors指......
  • 2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币, 第i堆金币
    2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币,第i堆金币的总重量和总价值分别是m[i]、v[i],阿里巴巴有一个承重量为T的背包,但并不一定有办法将全部的金币都装进去,他想装走尽可能多价值的金币,所有金币都可以随意分割,分割完的金币重量价值比(也就是单位......
  • Burp Suite Professional 2024.1.1 for macOS x64 & ARM64 (sysin) - 世界排名第一的
    BurpSuiteProfessional2024.1.1formacOSx64&ARM64(sysin)-世界排名第一的网络渗透测试工具包请访问原文链接:https://sysin.org/blog/burp-suite-pro-mac/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpSuiteProfessionalTheworld’s#1webpenet......
  • Burp Suite Professional 2024.1.1 (macOS, Linux, Windows) - Web 应用安全、测试和
    BurpSuiteProfessional2024.1.1(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgB......
  • Burp Suite Professional 2024.1.1 for Windows x64 (sysin) - 世界排名第一的网络渗
    BurpSuiteProfessional2024.1.1forWindowsx64(sysin)-世界排名第一的网络渗透测试工具包请访问原文链接:https://sysin.org/blog/burp-suite-pro-win/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpSuiteProfessionalTheworld’s#1webpenetration......
  • S275环保远程控制网关:污水处理系统效率提升
    近年来,随着城镇工业的不断发展,污水处理厂在城市中扮演着重要角色。作为国家新兴战略产业之一的水处理行业也是蓬勃发展。如何节省成本、保证水质的稳定性和安全性,从而达到节能、减排、节水的目的是工厂考虑的重中之重。案例客户是一家水处理行业的配套供应商,终端设备为水处理设备。......
  • 1/27 学习进度笔记
    今日学习了DataFrame的代码构建--读取外部数据读取数据源包括text,csv,json,parquet四种数据源schema=StructType().add("data",StringType(),nullable=True)df=spark.read.format("text").\schema(schema=schema).\load("../data/sql/people.txt")df=......
  • C转C++速成浅入浅出系列——STL之bitset
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。bitset【bitset:位集,比特集】理解为比特集。特点是①只能存入0与1②小端存储(可参阅计算机组成原理知识,表现为按b[i]增序输出时会倒序输出)需提供头文件#include<bitset> 创建注:①存储时......
  • 报错AttributeError: can't set attribute (image.mode = desired_mode)
      docker容器中安装了pillow包,以及imageio[ffmpeg],运行程序时报错AttributeError:can'tsetattribute(image.mode=desired_mode),发现imageio==2.31.5版本与pillow==10.1.0版本不兼容导致报错,只需将pillow版本降低固定为10.0即可,最近pillow==10.2.0版本也发行了,这个不......