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. MongoDB 学习笔记之 手动预先分片

    手动预先分片: 目的:手动预先分片是为了防止未来chunk的移动,减少IO. sh.shardCollection("shop.users",{"userId" ...

  2. Flask上下文管理机制流程(源码剖析)

    Flask请求上下文管理 1 偏函数 partial 使用该方式可以生成一个新函数 from functools import partial def mod( n, m ): return n % ...

  3. JS的加减乘除高精度

    //除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:accDiv(arg1,arg2) ...

  4. 手把手带你体验Stream流

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 上一篇讲解到了Lambda表达式的使用<最近学 ...

  5. 超链接target属性的取值和作用?

    <a>标签的target属性规定在何处打开连接文档 属性值 _black:点击一次打开一个新窗口 _new:始终在同一个新窗口中打开 _self:默认,在当前窗口打开 _parent:在父 ...

  6. 一文掌握在Word中快速编写公式

    在使用Word编写文章时,总会遇到书写数学公式的情况.使用Word的公式输入工具需要频繁地使用鼠标,因而编写公式会显得繁琐麻烦,那么有什么办法可以优雅地在Word中书写公式呢?其实Word早在Word ...

  7. day 23

    目录 面向对象总复习 面向对象总复习 面向过程编程思想: ​ 核心是过程,过程指的是做事情的步骤,即先干什么再干什么. ​ 基于该编程思想编程,就好比一条流水线,一种机械式的思维方式. 面向对象编程思 ...

  8. 我的Java秋招面经大合集

    阿里面经   阿里中间件研发面经 蚂蚁金服研发面经 岗位是研发工程师,直接找蚂蚁金服的大佬进行内推. 我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer. 然后我也参加了 ...

  9. BZOJ 1345: [Baltic2007]序列问题Sequence

    1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1180  Solved: 633[Subm ...

  10. Maya零基础新手入门教程第一部分:界面

    第1步:菜单 如果您曾经使用过一个软件,那么您将习惯菜单!在Maya中,菜单包含用于在场景中工作的工具和操作.与大多数程序一样,主菜单位于Maya窗口的顶部,然后还有面板和选项窗口的单独菜单.您还可以 ...