「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. 线程 IO流 网络编程 基础总结

    线程 进程---->进行中的程序 线程---->由进程创建 一个进程可以创建多个线程 并发:同一个时刻 多个任务交替执行 造成一种貌似同时进行的错觉 简单来说 单个cpu的多任务就是并发 ...

  2. vue 核心加解密工具类 方法

    1 /* base64 加解密 2 */ 3 export let Base64 = require('js-base64').Base64 4 5 /* md5 加解密 6 */ 7 export ...

  3. uniapp以及微信小程序中scroll-view隐藏滚动条 自定义滚动条

    隐藏滚动条 1.全局隐藏滚动条,在app.vue中 ::-webkit-scrollbar{ display: none; } 2.局部隐藏藏滚动条 样式没有使用scoped属性时, 否则无效. .u ...

  4. Two pointer方法

    I.何为Two pointer 用两个哨兵指向两个序列,通过利用序列本身的性质减少遍历次数,来更快得解决一些归并问题 基本问题 给定一个正整数递增序列和一个正整数M,求序列中两个不同位置的a,b使得a ...

  5. Java程序设计基础笔记 • 【第3章 运算符与表达式】

    全部章节   >>>> 本章目录 3.1 运算符(一) 3.1.1 赋值运算符 3.1.2 算数运算符 3.1.3 复合运算符 3.1.4 实践练习(一) 3.1.5 实践练习 ...

  6. WPF使用字体图标

    首先我们要有字体文件,可以去阿里巴巴矢量图标库下载,下载解压后可以看到如下文件: 其中,iconfont.ttf就是字体文件,我们将该文件引入到自己的项目中,将iconfont.ttf文件的属性中&q ...

  7. 每天学一点——python基本数据类型

    python基本数据类型 字符串类型(str) 字符串类型的数据一定是描述性质的,且由引号括起来的数据都是字符串数据(单引号.双引号.三引号.) 如下图 (简单易懂) 这里列举一些不明所以的问题 如图 ...

  8. exit hook

    之前经常改 malloc_hook , realloc_hook,free_hook 为 one_gadget 来 get shell ,最近看到一种利用是改 exit hook(winmt师傅告诉我 ...

  9. 深入 Laravel 内核之装饰模式

    装饰模式核心内容: 装饰模式可以在不影响组件对象的情况下,以动态.透明的方式从外部给对象添加功能: 装饰器模式的本质就是动态组合.动态是手段,组合是目的.装饰模式是通过把复杂的功能简单化.分散化,在运 ...

  10. centos6.5搭建LAMP

    实验前准备    (1)service iptables stop   #关闭防火墙       service iptables status   #查看防火墙是否已经关闭       iptabl ...