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. SpringBootSecurity学习(21)前后端分离版之OAuth2.0非对称加密

    JWT转换器 前面的例子中,都是在授权服务配置类中配置了一个很简单的jwt转换器,如下: 可以看到我们只用setSigningKey方法配置了一个秘钥,这里使用的是简单的对称加密的方式来加密jwt内容 ...

  2. 【JavaScript】 控制自适应高度

    <iframe src="需要连接的iframe地址" id="iframepage" name="iframepage" frame ...

  3. INTELLIJ MAC查看类结构快捷键

    mac下intellij查看类结构快捷键有两种形式. 方法一 alt+7,通过窗口展示类结果,点击对应的方法,类中跳转到对应的位置,但此窗口并不会消失.如下图: 方法二 默认使用command+F12 ...

  4. Python多任务之进程

    Process多进程 进程的概念 程序是没有运行的代码,静态的: 进程是运行起来的程序,进程是一个程序运行起来之后和资源的总称: 程序只有一个,但同一份程序可以有多个进程:例如,电脑上多开QQ: 程序 ...

  5. JDBC访问数据库的基本步骤

    加载驱动 通过DriverManager对象获取连接对象Connection 通过连接对象获取会话 通过会话进行数据的增删改查,封装对象 关闭资源

  6. C#基于Quartz.NET实现任务调度并部署Windows服务

    一.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp ...

  7. redis之spring应用

    前言 读本文之前,需要大家对redis有所了解,大家可以去看一下我之前分享的redis安装及简单使用这一随笔,而本文我将跟大家分享学习一下redis与spring的集成.当然,首先需要打开我们的red ...

  8. Vue-CLI项目-axios模块前后端交互(类似ajax提交)

    08.31自我总结 Vue-CLI项目-axios前后端交互 一.模块的安装 npm install axios --save #--save可以不用写 二.配置main.js import axio ...

  9. PHP代码审计辅助脚本

    #!/usr/bin/env python import sys import os def main(): print ''' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ...

  10. MS12-042 用户态调度机制特权提升漏洞

    漏洞编号:MS12-042 披露日期: 2012/6/12 受影响的操作系统:Windows 2000;XP;Server 2003;windows 7;Server 2008; 测试系统:windo ...