BZOJ 4919: [Lydsy1706月赛]大根堆 启发式合并
2024-10-19 21:18:23
我不会告诉你这是线段树合并的好题的。。。
好吧我们可以搞一个multiset在dfs时求出LIS(自带二分+排序)进行启发式合并,轻松加愉悦。。。
#include<cstdio>
#include<iostream>
#include<set>
const int N=;
#define R register int
using namespace std;
inline int g() {
R ret=; register char ch; while(!isdigit(ch=getchar()));
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret;
}
int n,m,cnt;
multiset<int>s[N];
int vr[N<<],nxt[N<<],fir[N],w[N];
inline void add(int u,int v) {vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;}
inline void dfs(int u) {
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
dfs(v); if(s[u].size()<s[v].size()) swap(s[u],s[v]);
for(multiset<int>::iterator it=s[v].begin();it!=s[v].end();++it) s[u].insert(*it);
} multiset<int>::iterator it=s[u].lower_bound(w[u]); if(it!=s[u].end()) s[u].erase(it);
s[u].insert(w[u]);
}
signed main() {
n=g(); for(R i=,fa;i<=n;++i) {
w[i]=g(),fa=g(); if(i==) continue; add(fa,i);
} dfs(); printf("%d\n",s[].size());
}
2019.04.20
最新文章
- Sqlserver查询结果,让某列结果合并一列并且逗号分隔。
- 基于ruby的watir自动化测试 笔记一
- Android Studio配置指南总结
- Cheatsheet: 2015 08.01 ~ 08.31
- 九宫格抽奖HTML+JS版
- TYVJ P1072 bomb Label:看不懂题意
- Android网络编程系列 一 Socket抽象层
- 使用eclipse远程调试Tomcat的方法
- Cracking the coding interview
- js得到分页栏
- css的单位
- unlink()
- iOS下WebRTC音视频通话(一)
- Android进程间通信IPC
- Django-3-Template模板
- 利用mybatis generator实现数据库之间的表同步
- 使用Java打印字符串表格(中英文内容不乱)
- MR目录结构
- Python在Win10系统的安装和使用配置
- PageObject&;PageFactory
热门文章
- [SHOI2017]期末考试
- ACM学习历程—HDU1041 Computer Transformation(递推 &;&; 大数)
- 构建嵌入式小型Linux系统
- Exchange邮箱设置,android手机和mac book
- linux python 更新版本
- Poj 3903 Stock Exchange(LIS)
- poj 2000 Gold Coins(水题)
- JVM插码之三:javaagent介绍及javassist介绍
- Linux/Unix 指令使用说明的格式介绍(the Bash Command &#39;Usage&#39; Syntax)
- p2345 奶牛集会