首页 > 其他分享 >P8972 『GROI-R1』 一切都已过去

P8972 『GROI-R1』 一切都已过去

时间:2023-01-27 21:46:05浏览次数:55  
标签:oth num5 GROI node R1 num2 10 P8972 le

本题最大的难点是小数不容易预处理(容易爆 \(double\))。

考虑如何用整数来表示小数,即 \(w = k\times 10^{-4}\),此时 \(k\) 一定满足 \(k\) 为整数且大于等于零。

因此 \(x\) 和 \(y\) 为端点的简单路径上边权乘积与点 \(x\) 的点权相乘的积可以改写为 \(10^{-4}k_x \times\sum_{i=1}^{i\le num} 10^{-4}k_i\) ,其中 \(\sum_{i=1}^{i\le num} 10^{-4}k_i\) 为简单路径上边权乘积。

改变一下形式:

\[\begin{aligned} &10^{-4}k_x \times\sum_{i=1}^{i\le num} 10^{-4}k_i\\ &10^{-4}k_x \times 10^{-4num}\sum_{i=1}^{i\le num} k_i\\ &10^{-4num-4}\times (k_x \sum_{i=1}^{i\le num} k_i)\\ \end{aligned} \]

考虑质因数分解,有 \(k_x \sum_{i=1}^{i\le num} k_i = 2^{c_1}3^{c_2}5^{c_3}\dots p_d^{c_d}\) ,因此该路径上边权乘积与点 \(x\) 的点权相乘的乘积为整数当且仅当 \(4num+4\le c_1,c_3\)。

所以对于每个点记录点权和到 \(1\) 的简单路径上边权乘积的 \(c_1,c_3\) 的值,倍增求 \(LCA\) 就可以在 \(O(n\log n)\) 的复杂度下通过本题。

//Author: __ODT__
// 省略一堆头文件和快读.....
const I inf = 0x3f3f3f3f;
const I N = 1e6;
struct node{
    I num2, num5;
    void get(){
        double s; cin >> s;
        I x = (I)((double)s * 10000);
        if(x == 0) num2 = num5 = inf;
        else{
            num2 = -4, num5 = -4;
            while(x%2==0)num2++, x/=2;
            while(x%5==0)num5++, x/=5;
        }
    }
    void operator += (const node &oth){num2 += oth.num2, num5 += oth.num5;}
    node operator - (const node &oth){return (node){num2 - oth.num2, num5 - oth.num5};}
    node operator + (const node &oth){return (node){num2 + oth.num2, num5 + oth.num5};}
}a[N];
I n, q;
I h[N], nt[N<<1], to[N<<1], tot;
node val[N<<1];
inl void link(I u, I v){
    nt[++tot] = h[u], h[u] = tot, to[tot] = v;
    val[tot].get(); swap(u, v);
    nt[++tot] = h[u], h[u] = tot, to[tot] = v;
    val[tot] = val[tot-1];
}
I st[N][21], dep[N];
node d[N];
inl void dfs(I u, I fa){
    st[u][0] = fa, dep[u] = dep[fa] + 1;
    for(I i = 1; i <= 18; i ++)
        st[u][i] = st[st[u][i-1]][i-1];
    for(I i = h[u]; i; i = nt[i]){
        I v = to[i];
        if(v == fa) continue;
        d[v] += val[i];
        d[v] += d[u];
        dfs(v, u);
    }
}
inl I lca(I x, I y){
    if(dep[x] < dep[y]) swap(x, y);
    for(I i = 18; i >= 0; i --) if(dep[st[x][i]] >= dep[y]) x = st[x][i];
    if(x == y){return x;}
    for(I i = 18; i >= 0; i --)
        if(st[x][i] != st[y][i]) x = st[x][i], y = st[y][i];
    return st[x][0];
}
node dist(I x, I y){
    I l = lca(x, y);
    return a[x] + (d[x] - d[l]) + (d[y] - d[l]);
}
int main(){
    n = read(), q = read();
    for(I i = 1; i <= n; i ++) a[i].get();
    for(I i = 1, u, v; i < n; i ++){
        u = read(), v = read(), link(u, v);
    }
    dfs(1, 0);
    for(I i = 1; i <= q; i ++){
        I x, y; x = read(), y = read();
        node c = dist(x, y);
        puts(c.num2 >= 0 && c.num5 >= 0 ? "Yes" : "No");
    }
    return 0;
}

标签:oth,num5,GROI,node,R1,num2,10,P8972,le
From: https://www.cnblogs.com/dadidididi/p/17069385.html

相关文章

  • Loadrunner11创建脚本、打开vugen、controller、analysis超级慢的解决方法
    问题现象启动的时候很慢,即打开LR11的启动程序很慢;点击创建脚本的时候也很慢:打开脚本很慢:创建controller场景很慢:分析结果的时候很慢:解决方法:如果你......
  • 【题解】P6071 『MdOI R1』Treequery
    海浪尽头的你啊,到底何时归来?额滴就木异象啊……思路清真树论。树论地考虑祖先后代关系,分讨一下。用ST表处理一下\(lca(l,r)=u\):\(u,p\)无祖先后代关系,答案......
  • 01-Cifar10 数据集简介
    Cifar10数据集由6万张32*32的彩色图片组成,一共有10个类别。每个类别6000张图片。其中有5万张训练图片及1万张测试图片。数据集被划分为5个训练块和1个测试块,每个块1万......
  • 题解: Luogu P8894 「UOI-R1」求和
    题目链接:link前言我的一个学长在一次比赛中出了这道题,然后,我就把这道题切了其实这道题还是比较简单的,然后我就介绍一下我的比赛时的思路和做法30分做法根据标签我......
  • Vetcor1
    vector1.vector存放内置数据类型容器:vector算法:for_each迭代器:vector<int>::iterator#include<iostream>#include<vector>#include<algorithm>//标准算法的头文件usin......
  • ID 为“Timer1”的控件需要页面上有ScriptManager。ScriptManager 必须在任何需要它的
    原文链接:https://blog.csdn.net/myy629464/article/details/76783370http://www.noobyard.com/article/p-ubifwkck-bo.html  解决办法:代码:(那个窗体出错那个源中写)......
  • [ICLR18]联合句法和词汇学习的神经语言模型
    原文链接:​​NeuralLanguageModelingbyJointlyLearningSyntaxandLexicon​​论文地址:​​NeuralLanguageModelingbyJointlyLearningSyntaxandLexicon......
  • 基础_cifar10_model
    今天进一步在cifar10数据集上解决几个问题:1、比较一下序贯和model,为什么要分成两块;2、同样的条件下,我去比较一下序贯和model。这个例子作为今天的晚间运行。1、比较一......
  • 尝试解决cifar10问题
    注意事项:1、我要用kaggle的数据集,而不是用其它的数据集;2、最终得到的结果要以test为导向;1、先打开jupyter,并且把数据集传到dl_machine上去。想办......
  • 部署Ingress Controller1.31 以及使用案例
    Ingress是什么?项目地址:​https://github.com/kubernetes/ingress-nginx​​​​Ingress​​ 公开从集群外部到集群内​​服务​​的HTTP和HTTPS路由。流量路由由Ing......