2023NOIP A层联测31 T4 民主投票
2023NOIP A层联测31 T4 民主投票
思维好题。
思路
首先可以设 \(s\) 每个人最多获得的票数,一开始所有点都把自己的票投给自己父亲。
如果一个点的票数超过 \(s\) 了,那么这个点肯定要把票分给他的父亲。
设 \(f_{u,s}\) 为 \(u\) 点在最多获得 \(s\) 票的情况下要向父亲分的票数(不包括一开始投的)。
如果 \(f_{1,s}\) 大于 \(0\) 表示无法每个点至多获得 \(s\),反之则可以。
可以二分求这个最小的 \(s\) 值。
点 \(u\) 获得的最多票数是 \(siz_u-1\) 票。
如果 \(siz_u-1>s\) 那么 \(u\) 肯定可以获胜。如果 \(siz_u-1<s\) 那么证明 \(f_{u,s}=0\),把 \(u\) 子树脱离原树不造成影响,即 \(u\) 子树内所以点投 \(u\) 无法影响最小值 \(s\),所以 \(siz_u-1<s\) 时,\(u\) 肯定无法获胜。
对于 \(siz_u-1=s\) 而言,\(f_{u,s}=1/0\)。
此时求 \(f_{1,s-1}\),\(f_{1,s-1}\) 必然大于 \(0\)。
如果 \(f_{1,s-1}=1\),则这一票肯定是通过某个 \(siz_u-1=s\) 的点传上来,由于点 \(u\) 在被取的情况下不会向上传票,所以点 \(u\) 可以获胜,即去掉 \(u\) 的后代后,\(f_{1,s-1}=0\)。
如果 \(f_{1,s-1}>1\),肯定是有多个上文分析的点会传票到根,\(u\) 节点不能获胜。
CODE
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
struct node
{
int to,nxt;
}edge[maxn];
int n,tot=0;
int head[maxn],f[maxn],sz[maxn],ans[maxn];
bool fg;
inline void add(int x,int y)
{
tot++;
edge[tot].to=y;
edge[tot].nxt=head[x];
head[x]=tot;
}
inline void clr()
{
tot=0;
for(int i=0;i<=n;i++) head[i]=0,edge[i]={0,0};
}
inline void dfs_sz(int u)
{
sz[u]=1;
for(int i=head[u];i;i=edge[i].nxt) dfs_sz(edge[i].to),sz[u]+=sz[edge[i].to];
}
inline void dfs_ans(int u,int mid)
{
f[u]=0;
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
dfs_ans(v,mid);
f[u]+=f[v]+1;
if(u==1&&f[u]-mid>0&&fg) return ;
}
f[u]=max(0,f[u]-mid);
}
inline void dfs_change(int u,int mid)
{
if(sz[u]-1==mid){ans[u]=1;return;}
for(int i=head[u];i;i=edge[i].nxt) if(f[edge[i].to]>0) dfs_change(edge[i].to,mid);
}
int main()
{
int _;
scanf("%d",&_);
while(_--)
{
fg=1;
scanf("%d",&n);
clr();
for(int i=2;i<=n;i++)
{
int x;
scanf("%d",&x);
add(x,i);
}
dfs_sz(1);
int l=1,r=n,x=0;
while(l<=r)
{
int mid=(l+r)>>1;
dfs_ans(1,mid);
if(f[1]==0) r=mid-1,x=mid;
else l=mid+1;
}
for(int i=1;i<=n;i++) {ans[i]=(sz[i]-1>x);}
fg=0;
dfs_ans(1,x-1);
if(f[1]==1) dfs_change(1,x);
for(int i=1;i<=n;i++) printf("%d",ans[i]);
putchar('\n');
}
}
2023NOIP A层联测31 T4 民主投票的更多相关文章
- 使用T4模板生成代码的学习
之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...
- C语言 · 色盲的民主
算法提高 色盲的民主 时间限制:1.0s 内存限制:256.0MB 问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自己的主张,争论不休.最终, ...
- Java实现 蓝桥杯VIP 算法提高 色盲的民主
算法提高 色盲的民主 时间限制:1.0s 内存限制:256.0MB 色盲的民主 问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自己的主张,争论不休.最终,他 ...
- Raft 为什么是更易理解的分布式一致性算法
一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...
- 【CTSC 2015】&【APIO 2015】酱油记
蒟蒻有幸参加了神犇云集的CTSC & APIO 2015,感觉真是被虐成傻逼了……这几天一直没更新博客,今天就来补一下吧~~(不过不是题解……) Day 0 从太原到北京现在坐高铁只需3小时= ...
- 漫谈PHP代码规范
前言 虽说PHP是世界上最好的语言,但是写出来的PHP代码却往往不是最美观的.究其原因,可能正式因为PHP简单易上手,适合快速迭代的特性,导致了我们沉浸在迅速完成需求迭代的窃喜中,却忘记了规范性.忽略 ...
- 【转】Raft 为什么是更易理解的分布式一致性算法
编者按:这是看过的Raft算法博客中比较通俗的一篇了,讲解问题的角度比较新奇,图文并茂,值得一看.原文链接:Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了 ...
- Raft 为什么是更易理解的分布式一致性算法(转)
一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...
- 未来简史之数据主义(Dataism)
https://www.jianshu.com/p/8147239c9cb0?from=singlemessage junjguo 关注 2017.04.24 22:08* 字数 8116 阅读 31 ...
- [项目2] 10mins
1.准备工作 M层:生成虚假数据 from django.db import models from faker import Factory # Create your models here. c ...
随机推荐
- Gluon 编译 JavaFx -> exe
Gluon 编译 JavaFx -> exe 能力强的伙伴可以直接参考官方文档 开发工具 idea 2023.3 idea gluon plugin git apache-maven-3.8.4 ...
- 如果nacos注册中心挂了怎么办
当服务异常宕机,Nacos还未反应过来时,可能会发生的状况以及现有的解决方案. Nacos的健康检查 故事还要从Nacos对服务实例的健康检查说起. Nacos目前支持临时实例使用心跳上报方式维持活性 ...
- OData – 权限管理
前言 OData 其实没有权限的机制, Client 可以任意的 $select, $expand. 即便它可以做简单防御设置, 但是离平常的业务需求还是很远. 一般上 query entity 常见 ...
- std::variant快速上手
std::variant 是 C++17 引入的一种类型安全的联合体,用来存储多个可能类型中的一种值,且保证使用时的类型安全.相比于传统的 union,std::variant 不仅能够存储不同类型的 ...
- 在windows下安装Composer(转载)
在windows下安装Composer Composer是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer ...
- 利用3Dnii标签文件,生成png图片
为了便于直观的看到2D标签,通常会将其转化为png图像,具体代码如下: # coding:utf-8 from glob import glob import os import SimpleITK ...
- Diffusion系列 - DDPM 公式推导 + 代码 -(二)
Denoising Diffusion Probabilistic Model(DDPM)原理 1. 生成模型对比 记 真实图片为 \(x_0\),噪声图片为 \(x_t\),噪声变量 \(z\sim ...
- 封装一个Promise.all 的函数
// 1. 准备三个异步函数 const promise1 = Promise.resolve('prom11ise1'); const promise2 = new Promise(function ...
- 什么是 Ajax,Ajax 的原理,Ajax 都有哪些优点和缺点
ajax是异步的js和xml,是一种创建交互式网页的开发技术,是和服务器进行异步通讯的技术 : 核心就是使用XMLHttpRequest向服务器发送请求获取数据 : 优点: 页面不需要刷新,用户体验良 ...
- 6. CSS有哪些方法可以提升层级
1. 使用 z-index 2. 使用定位,脱离标准流