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的更多相关文章

  1. 2016.10.30 NOIP模拟赛 day2 PM 整理

    满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...

  2. 2016.10.30 NOIP模拟赛 day2 AM 整理

    题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...

  3. 2018.10.30 NOIp模拟赛T2 数字对

    [题目描述] 小 H 是个善于思考的学生,现在她又在思考一个有关序列的问题.        她的面前浮现出一个长度为 n 的序列{ai},她想找出一段区间[L, R](1 <= L <= ...

  4. 2018.10.30 NOIp模拟赛 T1 改造二叉树

    [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...

  5. 2018.10.30 NOIP模拟 有环无向图(dijkstra+巧妙建图)

    传送门 建图巧妙啊. 对于每个点的出边,我们将它们排序之后依次连边. 这样可以把O(m2)O(m^2)O(m2)的边数变成O(m)O(m)O(m)的了. 连的权值就是max(edgemax(edgem ...

  6. 2018.10.30 NOIP模拟 字胡串(单调栈+容斥)

    传送门 对于每个点,用单调栈求出它左右第一个比他大的位置. 然后对每个点O(logai)O(log_{a_i})O(logai​​)求出第一个拥有跟它不同二进制位的位置. 然后容斥一下就行了. 代码

  7. 2018.10.30 NOIP模拟 排列树(树形dp+组合数学)

    传送门 考试的时候乱搞过了. 其实题目就是让你求拓扑排序方案数. 直接树形dpdpdp然后组合数转移一下就行了. 乱搞代码

  8. 2018.08.30 NOIP模拟 graph(dfs序/树剖+线段树)

    [描述] 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达. 2. 接下来的 N ...

  9. 2018.08.30 NOIP模拟 kfib(矩阵快速幂+exgcd)

    [输入] 一行两个整数 n P [输出] 从小到大输出可能的 k,若不存在,输出 None [样例输入 1] 5 5 [样例输出] 2 [样例解释] f[0] = 2 f[1] = 2 f[2] = ...

随机推荐

  1. QCustomPlot 基础

    QCutomPlot简介 官网网址及介绍 https://www.qcustomplot.com/ QCustomPlot is a Qt C++ widget for plotting and da ...

  2. LeetCode初级算法--数组02:旋转数组

    LeetCode初级算法--数组02:旋转数组 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ ...

  3. Java 语言的发展史

    维基百科引入 早期的Java 语言最开始只是Sun计算机(Sun MicroSystems)公司在1990年12月开始研究的一个内部项目.Sun计算机公司的一个叫做帕特里克·诺顿的工程师被公司自己开发 ...

  4. Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

    之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟.这次随着 Spring Framework 5.2.0 成功发布之后,Spring ...

  5. unittest生成测试报告

    1.先导入HTMLTestRunner模块 2.实例一脚本如下 #coding=utf-8 import unittest import HTMLTestRunner #封装批量执行用例 def al ...

  6. 常见PHP危险函数及特殊函数

    PHP代码执行函数 - eval & assert & preg_replace mixed eval ( string $code ) 把字符串 $code 作为PHP代码执行. 很 ...

  7. php 安装vld扩展

    下载地址 : http://pecl.php.net/package/vld 此处包是 : vld-0.14.0.tgz 1. tar -xvf  vld-0.14.0.tgz  -C  INSTAL ...

  8. Intel Sandy Bridge Microarchitecture Events

    This is a list of all Intel Sandy Bridge Microarchitecture performance counter event types. Please s ...

  9. java源码解析

    String深入解析 String具有不变性的原因: String被final修饰,它不可能被继承,也就是任何对String的操作方法,都不会被继承覆写 String中保存数据的是一个char数组的v ...

  10. shell基本运算符(五)

    shell支持多种运算符,包括:算术运算符.关系运算符.布尔运算符.字符串运算符.文件测试运算符. 注意:条件表达式要放在方括号之间,并且要有空格,eg:[$a==$b] 是错误的,必须写成 [ $a ...