【AtCoder】【AGC009D】Uninity

news/2024/7/3 3:45:20

Description

给出一棵树,要求确认一种点分治策略,使得点分树的深度最小。

Solution

显然,答案的上界为log(然并卵)。

我们先定义点权,一个点的点权为它在点分树上的深度,
显然,一个方案合法,只要保证两个点权相同的点之间存在一个点权比它们都小的点,
保证这个条件的最小答案即为最后答案;

每个点x记录一个二进制,第i位表示当前子树中,是否存在一个点权为i的点,它到x的路径上没有点权比他小的点,
对于每个点,直接贪心选最小的即可,因为如果你选大了,对以后的点不会更优,

复杂度: O(nlog(n)) O ( n log ⁡ ( n ) )

Code

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
using namespace std;
const int N=100500;
int read(int &n)
{
    char ch=' ';int q=0,w=1;
    for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
    if(ch=='-')w=-1,ch=getchar();
    for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int m,n,ans;
int B[2*N][2],A[N],B0;
int f[N];
int er[N];
void link(int q,int w)
{
    B[++B0][0]=A[q],A[q]=B0,B[B0][1]=w;
    B[++B0][0]=A[w],A[w]=B0,B[B0][1]=q;
}
void dfs(int q,int fa)
{
    int t=0;
    efo(i,q)if(B[i][1]!=fa)
    {
        dfs(B[i][1],q);
        t=max(t,f[q]&f[B[i][1]]);
        f[q]|=f[B[i][1]];
    }
    fo(i,1,22)if(er[i]>t&&!(f[q]&er[i])){t=i;break;}
    ans=max(ans,t);
    f[q]=(f[q]&(er[23]-er[t]))|er[t];
}
int main()
{
    int q,w;
    er[1]=1;fo(i,2,23)er[i]=er[i-1]<<1;
    read(n);
    fo(i,1,n-1)read(q),read(w),link(q,w);
    dfs(1,0);
    printf("%d\n",ans-1);
    return 0;
}

http://www.niftyadmin.cn/n/2675413.html

相关文章

西游记人物

package com.hanqi;public class Xiyouji2 {String Name;double Height;String Weapon;void printName(){System.out.println(Name);}void printWeapon(){System.out.println("武器&#xff1a; "Weapon);}public static void main(String[] args){Xiyouji2 XiYouJiR…

Microsoft更新Cosmos DB,提供Cassandra支持,提高可用性保证

在上个月的Connect 2017大会上&#xff0c;Microsoft新发布了多个Azure Cosmos DB更新&#xff0c;其中包括支持使用Cassandra NoSQL数据库的API&#xff0c;以及更高的可用性保证。这样&#xff0c;用户可以在Cosmos DB内使用针对Cassandra NoSQL数据库的API去操作数据模型。此…

【AtCoder】【ARC064F】Rotated Palindromes

Description 求有多少个序列满足以下条件&#xff1a; 1. 序列有n位&#xff1b; 2. 序列的每位为1~m之间的整数&#xff1b; 3. 这个序列经过旋转以后可以变成一个回文串&#xff1b; Solution 这是一个悲惨的故事…..想了一天多&#xff0c;一直在想怎么减掉不合法的&…

网站常见的反爬虫和应对方法

这几天在爬一个网站&#xff0c;网站做了很多反爬虫工作&#xff0c;爬起来有些艰难&#xff0c;花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。 从功能上来讲&#xff0c;爬虫一般分为数据采集&#xff0c;处理&#xff0c;储存三…

Android系统层Watchdog机制源码分析

一&#xff1a;为什么需要看门狗? Watchdog,初次见到这个词语是在大学的单片机书上, 谈到了看门狗定时器. 在很早以前那个单片机刚发展的时候, 单片机容易受到外界工作影响, 导致自己的程序跑飞, 因此有了看门狗的保护机制, 即:需要每多少时间内都去喂狗, 如果不喂狗, 看门狗将…

【AtCoder】【ARC072F】Dam

Description 有一坐体积为m的水库&#xff0c;每天早上会有水流进来&#xff0c;晚上会放水&#xff0c; 每天流进来的水的温度和体积都可能不同&#xff0c;俩温度不同的水混合后的温度为&#xff1a;t1∗v1t2∗v2v1v2t1∗v1t2∗v2v1v2&#xff0c; 假设水的温度不受其他因…

SQL——实例记录(日期函数转换)

{转} 一般有以下几种转换方式&#xff0c;可根据实际需要选用&#xff1a; select Convert(varchar(10),getdate(),120)2006-05-12 select CONVERT(varchar, getdate(), 120 )2006-05-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),-,), ,),:…

springMVC:HandlerInterceptor拦截器的使用

2019独角兽企业重金招聘Python工程师标准>>> 1.使用背景 Web项目中需要判断http接口用户Post上来的数据是否合法&#xff0c;如果不合法要另做处理&#xff0c;用户Post上来的数据是Json形式的&#xff0c;我们用了RequestBody标记自动将json形式的提交封装为一个Mo…