7.30 NOIP模拟10
T1.辣鸡
考试的时候竟然被我以“麻烦”弃掉了,赛后发现这题好水啊,直接sort一下寻找四周即可。
T2.模板
考试时期望得分70,实际得分5
首先看到这种题基本就是线段树,我们以时间为下标,对每一个点种一棵线段树,在dfs时向上合并,同时维护出每个点的子树中每种颜色第一次出现的位置(用数组,map都行)
给每一个节点开一个vector,直接向上传递vector,并且将vector中的所有元素插入父节点的线段树中,并更新颜色出现的最早位置,将更晚的球清掉即可。
在向上合并时,我们采用启发式合并的方式来保障复杂度,对于每个点,将其所有轻儿子和并入它的重儿子(带有信息最多的儿子)中,即可保证合并的复杂度不会爆炸。
T3.大佬
假期望,求出所有的劳累值之和除以总情况数即可。
所以我们只要求出最大难度为j的方案数即可。
简单粗暴,dp或者直接快速幂容斥都行。
#include<bits/stdc++.h>
using namespace std;
map<int,int>g[];
vector<pair<int,int> >gg[];
int rc[],sum[],q,ans[],ttt,siz[],ss[],mm[],mmm[];
int n,m,tt,fi[],ne[],to[],tot,a[],f[],d[],r[],lc[];
inline void add(int x,int y)
{
ne[++tot]=fi[x];
fi[x]=tot;
to[tot]=y;
}
void insert(int &x,int l,int r,int pos,int val)
{
if(!x)x=++tt;
if(l==r)
{
if(val==)sum[x]++;
if(val==)sum[x]++,ss[x]=;
if(val==-)ss[x]=;
return;
}
int mid=(l+r)>>;
if(pos<=mid)insert(lc[x],l,mid,pos,val);
else insert(rc[x],mid+,r,pos,val);
sum[x]=sum[lc[x]]+sum[rc[x]];
ss[x]=ss[lc[x]]+ss[rc[x]];
}
int query(int x,int l,int r,int val)
{
if(!x)return ;
if(sum[x]<=val) return ss[x];
int mid=(l+r)>>;
if(sum[lc[x]]>=val)return query(lc[x],l,mid,val);
return query(rc[x],mid+,r,val-sum[lc[x]])+ss[lc[x]];
}
void dfs2(int x,int fa)
{
for(int i=fi[x];i;i=ne[i])
{
int y=to[i];
if(y!=fa)
{
dfs2(y,x);
siz[x]+=siz[y];
if(siz[y]>siz[mm[x]])
mm[x]=y;
}
}
if(mm[x])
{
mmm[x]=mmm[mm[x]];
for(int i=;i<gg[x].size();i++)
{
int f=gg[x][i].first,se=gg[x][i].second;
gg[mmm[x]].push_back(gg[x][i]);
if(g[mmm[x]][se]>f)
insert(r[mmm[x]],,m,g[mmm[x]][se],-),
insert(r[mmm[x]],,m,f,),g[mmm[x]][se]=f;
else if(g[mmm[x]][se]==)
insert(r[mmm[x]],,m,f,),g[mmm[x]][se]=f;
if(g[mmm[x]][se]<f) insert(r[mmm[x]],,m,f,);
}
for(int i=fi[x];i;i=ne[i])
{
int y=to[i];
if(y!=fa&&y!=mm[x])
{
for(int j=;j<gg[mmm[y]].size();j++)
{
int se=gg[mmm[y]][j].first,f=gg[mmm[y]][j].second;
gg[mmm[x]].push_back(gg[mmm[y]][j]);
if(g[mmm[x]][f]>se)
insert(r[mmm[x]],,m,g[mmm[x]][f],-),
insert(r[mmm[x]],,m,se,),g[mmm[x]][f]=se;
else if(g[mmm[x]][f]==)
insert(r[mmm[x]],,m,se,),g[mmm[x]][f]=se;
if(g[mmm[x]][f]<se) insert(r[mmm[x]],,m,se,);
}
}
}
}
ans[x]=query(r[mmm[x]],,m,a[x]);
}
int main()
{
scanf("%d",&n);
for(int i=,x,y;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);siz[x]++;
gg[x].push_back(make_pair(i,y));
if(g[x][y]==)g[x][y]=i,insert(r[x],,m,i,);
else insert(r[x],,m,i,);
}
for(int i=;i<=n;i++)mmm[i]=i;
siz[]=-;dfs2(,);
scanf("%d",&q);
for(int i=,x;i<=q;i++)
scanf("%d",&x),printf("%d\n",ans[x]);
return ;
}
模板题
7.30 NOIP模拟10的更多相关文章
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- 2018.10.30 NOIp模拟赛T2 数字对
[题目描述] 小 H 是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为 n 的序列{ai},她想找出一段区间[L, R](1 <= L <= ...
- 2018.10.30 NOIp模拟赛 T1 改造二叉树
[题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...
- 2018.10.30 NOIP模拟 有环无向图(dijkstra+巧妙建图)
传送门 建图巧妙啊. 对于每个点的出边,我们将它们排序之后依次连边. 这样可以把O(m2)O(m^2)O(m2)的边数变成O(m)O(m)O(m)的了. 连的权值就是max(edgemax(edgem ...
- 2018.10.30 NOIP模拟 字胡串(单调栈+容斥)
传送门 对于每个点,用单调栈求出它左右第一个比他大的位置. 然后对每个点O(logai)O(log_{a_i})O(logai)求出第一个拥有跟它不同二进制位的位置. 然后容斥一下就行了. 代码
- 2018.10.30 NOIP模拟 排列树(树形dp+组合数学)
传送门 考试的时候乱搞过了. 其实题目就是让你求拓扑排序方案数. 直接树形dpdpdp然后组合数转移一下就行了. 乱搞代码
- 2018.08.30 NOIP模拟 graph(dfs序/树剖+线段树)
[描述] 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达. 2. 接下来的 N ...
- 2018.08.30 NOIP模拟 kfib(矩阵快速幂+exgcd)
[输入] 一行两个整数 n P [输出] 从小到大输出可能的 k,若不存在,输出 None [样例输入 1] 5 5 [样例输出] 2 [样例解释] f[0] = 2 f[1] = 2 f[2] = ...
随机推荐
- 【linux】jdk安装及环境变量配置
登录linux后,切换目录到 /usr/local cd /user/local 在/usr/local目录新建文件夹java用于存放jdk文件 mkdir java 在文件夹java中下载jdk文件 ...
- 超详细的FreeRTOS移植全教程——基于srm32
### 准备 在移植之前,我们首先要获取到FreeRTOS的官方的源码包.这里我们提供两个下载链接: > 一个是官网:http://www.freertos.org/ > 另外一个是代码托 ...
- meta标签中设置以极速模式打开网页
1.网页meta标签中X-UA-Compatible属性的使用的极速模式 <meta http-equiv="X-UA-Compatible" content="I ...
- display:box和display:flex属性介绍
1.display:box 父容器里面的box属性有box-orient|box-dirextion|box-align|box-pack|box-lines box-orient:用来确定父容器里面 ...
- Redis之数据类型及命令
Redis(REmote DIctionary Server) 是一个遵守BSD协议.支持网络.可基于内存亦可持久化的日志型key-value存储系统. KEY 常用指令: 指令 注释 备注 exit ...
- OpenGL全流程详细解读
导语 对于开发者来说,学习OpenGL或者其他图形API都不是一件容易的事情.即使是一些对OpenGL有一些经验的开发者,往往也未必对OpenGL有完整.全面的理解.市面上的OpenGL文章往往零碎不 ...
- IT爱心求助站
最近发生的一些事情,让我对自己的专业有了另外一层认识. 小尹同学,你是做软件的是吗?能否帮我看一下我的电脑问题? 老同学,我的电脑安装一个软件这么都装不上,能否帮我看一下呢? 邻居你好,我的手机怎么没 ...
- SecureCRT连接虚拟机下的CentOS7
1.首先在VMWare下配置CentOS为桥接模式: 2.查看本机ip: 3.ip addr查看centos的mac地址: 4.在root权限下修改/etc/sysconfig/network-scr ...
- Bran的内核开发教程(bkerndev)-03 内核初步
目录 内核初步 内核入口 链接脚本 汇编和链接 PS: 下面是我自己写的 64位Linux下的编译脚本 内核初步 在这节教程, 我们将深入研究一些汇编程序, 学习创建链接脚本的基础知识以及使用它的 ...
- Java学习笔记之基础语法(数组)
数组 数组概述:是具有相同数据类型的数据的集合 数组的定义:数据类型 数组名 [] 数组特点: 1,数组是引用数据类型. 2,数组值用大括号,元素之间用逗号隔开,元素的个数是0-N个 3,数组长度是固 ...