「JOI 2015 Final」舞会

略微思考一下即可知该过程可以化为一棵树。(3个贵族中选择1个,即新建一个节点连向这3个贵族)。

该树的结点个数为\(2n\).

考虑二分答案mid。

判定的是公主是否能和熟练度大于mid的人跳舞。

这样子是满足单调性的。

将熟练度大于等于mid的人设为1,小于mid的人设为0。

考虑dp。

每个结点记录需要多少个1才能使得它的值为1.

事实上,儿子只需要有两个1即可,故从三个儿子中取最小的两个。

复杂度\(o(nlog(n))\)。

#include<bits/stdc++.h>
#define rep(q,a,b) for(int q=a,q##_end_=b;q<=q##_end_;++q)
#define dep(q,a,b) for(int q=a,q##_end_=b;q>=q##_end_;--q)
#define mem(a,b) memset(a,b,sizeof a )
#define debug(a) cerr<<#a<<' '<<a<<"___"<<endl
using namespace std;
void in(int &r){
static char c;
r=0;
while(c=getchar(),!isdigit(c));
do r=(r<<1)+(r<<3)+(c^48);
while(c=getchar(),isdigit(c));
}
const int mn=100005;
bool cur1;
int st[mn],val[mn],n,m,at[mn]; int fa[mn<<1],son1[mn<<1],son2[mn<<1],son3[mn<<1];
int que[mn],tot;
void build(int n){
tot=n;
rep(q,0,n-1)que[q]=q+1;
while(n!=1){
int v=n%3,now,d=0;
for(now=0;now<n-v;now+=3){
++tot;
fa[que[now]]=tot;
fa[que[now+1]]=tot;
fa[que[now+2]]=tot;
son1[tot]=que[now];
son2[tot]=que[now+1];
son3[tot]=que[now+2];
que[v+d]=tot,++d;
}
for(int ct=0;now<n;++now,++ct)que[ct]=que[now];
n=n%3+n/3;
}
}
int dp[mn<<1];
const int INF=1e7;
void dfs(int x){
if(x<=n)return;
dfs(son1[x]),dfs(son2[x]),dfs(son3[x]);
dp[x]=dp[son1[x]]+dp[son2[x]]+dp[son3[x]]-max(dp[son1[x]],max(dp[son2[x]],dp[son3[x]]));
}
bool check(int v){
int hd=0;
rep(q,m+1,n)if(val[q]>=v)++hd;
rep(q,1,n)dp[q]=1;
rep(q,1,m)
if(val[q]>=v)dp[at[q]]=0;
else dp[at[q]]=INF;
dfs(tot);
return dp[tot]<=hd;
}
bool cur2;
int main(){
// cerr<<(&cur2-&cur1)/1024.0/1024.0<<endl;
freopen("party.in","r",stdin);
freopen("party.out","w",stdout);
in(n),in(m);
build(n);
rep(q,1,m)in(val[q]),in(at[q]),st[q]=val[q];
rep(q,m+1,n)in(val[q]),st[q]=val[q];
sort(st+1,st+n+1);
int l=1,r=n,ans=0;
while(l<=r){
int mid=l+r>>1;
if(check(st[mid]))l=mid+1,ans=st[mid];
else r=mid-1;
}
printf("%d\n",ans);
return 0;
}

「JOI 2015 Final」舞会的更多相关文章

  1. 「JOI 2015 Final」城墙

    「JOI 2015 Final」城墙 复杂度默认\(m=n\) 暴力 对于点\((i,j)\),记录\(ld[i][j]=min(向下延伸的长度,向右延伸的长度)\),\(rd[i][j]=min(向 ...

  2. 「JOI 2015 Final」分蛋糕 2

    「JOI 2015 Final」分蛋糕 2 题解 这道题让我想起了新年趣事之红包这道DP题,这道题和那道题推出来之后的做法是一样的. 我们可以定义dp[i][len][1] 表示从第i块逆时针数len ...

  3. LOJ#2351. 「JOI 2018 Final」毒蛇越狱

    LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,| ...

  4. 「JOI 2017 Final」JOIOI 王国

    「JOI 2017 Final」JOIOI 王国 题目描述 题目译自 JOI 2017 Final T3「 JOIOI 王国 / The Kingdom of JOIOI」 JOIOI 王国是一个 H ...

  5. 【LOJ】#3014. 「JOI 2019 Final」独特的城市(长链剖分)

    LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们 ...

  6. 【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)

    [题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操 ...

  7. 「JOI 2014 Final」飞天鼠

    「JOI 2014 Final」飞天鼠 显然向上爬是没有必要的,除非会下降到地面以下,才提高到刚好为0. 到达一个点有两种情况:到达高度为0和不为0. 对于高度不为0的情况,显然花费的时间越少高度越高 ...

  8. LOJ#2764. 「JOI 2013 Final」JOIOI 塔

    题目地址 https://loj.ac/problem/2764 题解 真的想不到二分...不看tag的话... 考虑二分答案转化为判定问题,那么问题就变成了能不能组合出x个JOI/IOI,考虑贪心判 ...

  9. 「JOI 2016 Final」断层

    嘟嘟嘟 今天我们模拟考这题,出的是T3.实在是没想出来,就搞了个20分暴力(还WA了几发). 这题关键在于逆向思维,就是考虑最后的\(n\)的个点刚开始在哪儿,这样就减少了很多需要维护的东西. 这就让 ...

随机推荐

  1. Spring中的@Bean注解

    @Bean 基础概念 @Bean:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理.产生这个Bean对象的方法Spring只会调用一次,随后这个 ...

  2. Xcode Error returned in reply: Connection invalid

    当电脑上有Xcode两个版本是使用其中的某一个的Simulator时出现了这样的报错 在Preference->Location->Command Line Tool 选择 Xcode 9 ...

  3. 基于Spring MVC + Spring + MyBatis的【图书资源管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45598347 练习点设计:模糊查询.删除.新增 一.语言和环境 实现语言:JAVA语 ...

  4. Java程序设计基础笔记 • 【第1章 初识Java】

    全部章节   >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...

  5. 编写Java程序,实现字符串统计和处理

    返回本章节 返回作业目录 需求说明: 在控制台输入纯字符的字符串,输出当前字符串的长度. 统计出该字符串中出现相同字母次数最多的字母(不考虑不同字母出现次数相同的情况). 将出现最多次数的字母字母替换 ...

  6. 为什么说DI解耦

    为什么说IOC/DI(控制反转/依赖注入)降低耦合 public class HomeController : Controller { private readonly IStudentRepons ...

  7. Kafka基础教程(一):认识Kafka

    Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,吞吐速率非常快,可以作为Hadoop的日志收集.Kafka是一个完全的分布式系统,这一点依赖于Zookeeper ...

  8. 基于CentOS7.x gitlab环境搭建,卸载,汉化 --卸载篇

    gitlab环境搭建,卸载,汉化 --卸载篇 完全卸载 停止gitlab gitlab-ctl stop 卸载gitlab rpm -e gitlab-ce 查看gitlab进程  ps aux | ...

  9. Centos7 用户权限相关

    groups指的是多个用户组,一对多,test可能是其他用户组 /etc/passwd --记录系统用户信息文件 /etc/shadow --系统用户密码文件 /etc/group   --组用户记录 ...

  10. 实验 4 :Open vSwitch 实验 —— Mininet 中使用 OVS 命令

    实验 4 :Open vSwitch 实验 -- Mininet 中使用 OVS 命令 一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调 ...