一句话题意:给你一颗n个点的树,节点初始状态下都是白色,有q次修改,每次修改会把[li,ri]区间内的点染成黑色,并且问黑色点能形成几个联通块,然后会将所有点染回白色。(也就是说每次都只有[li,ri]这个区间内的节点是黑色的)

数据范围:

对于 30%的数据:n<=100,q<=100;

对于 50%的数据:n<=2,000,q<=2,000;

对于 100%的数据:n<=200,000,q<=200,000,对于所有的区间,li<=ri。

30分做法:这个做法几乎没人写吧,两两判断区间内的点是否连通,时间复杂度\(O(n^3)\)

50分做法:题解说的用并查集维护可以做到\(O(n^2)\),蒟蒻表示不费,只能用大水漫灌法,同样\(O(n^2)\)

100分做法:一个很显然的性质,只要区间内任意两点每有一条边相连,联通块个数就少一个,设[l,r]内有k条边相连,答案即为\((r-l+1-k)\)

两种,表示考场上我都想到了,但是都不会写

第一种:裸的二位偏序问题,离线排序然后树状数组维护就好了,考场上我是真没看出这是二位偏序,我也确实对二位偏序理解不深,时间复杂度\(O(nlogn)\)

第二种:在线做法,由上面的性质可知,我们只需要维护每个区间内有多少条边就可以了,我们将所有的树边按照编号较⼩的点从⼩到⼤排序,然后⽤右端点建⼀个可持久化权值线段树,这样对于每个询问,我们只要在li~ri的线段树中查询⽐ri⼩的数有多少个就⾏了,时间复杂度\(O(nlogn)\),常数略大

以下是第一种做法的代码:

#include<cstdio>
#include<algorithm>
#define lowbit(i) (i&(-i))
struct oo{int x,y,id;}s[400001];
int n,q,sum,f[200001],ans[200001];bool cmp(oo a,oo b){return a.y==b.y?a.id<b.id:a.y<b.y;}
void add(int x){for(int i=x;i<=n;i+=lowbit(i))f[i]++;}
int get(int x){int now=0;for(int i=x;i;i-=lowbit(i))now+=f[i];return now;}
int main()
{
scanf("%d%d",&n,&q);
for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);if(x>y)std::swap(x,y);s[++sum]=(oo){x,y,0};}
for(int i=1;i<=q;i++)sum++,scanf("%d%d",&s[sum].x,&s[sum].y),s[sum].id=i;
std::sort(s+1,s+sum+1,cmp);
for(int i=1;i<=sum;i++)if(s[i].id)ans[s[i].id]=s[i].y-s[i].x+1-get(s[i].y)+get(s[i].x-1);else add(s[i].x);
for(int i=1;i<=q;i++)printf("%d\n",ans[i]);
}

icekingdom(2018.10.17)的更多相关文章

  1. Dell Technology Summit(2018.10.17)

    时间:2018.10.17地点:北京国家会议中心

  2. dream(2018.10.17)

    一句话题意:讲什么题意啊,见usaco2017feb silver的T1,一模一样,就是牛和鸡的读入顺序反过来了一下,数据范围大了10倍,卡掉了\(O(n^2)\)的算法. 数据范围: 对于 30%的 ...

  3. 2018.10.17 NOIP模拟 管道(状压dp)

    传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...

  4. 2018.10.17 NOIP模拟 发电机(概率dp)

    传送门 考试空间开大了爆零不然只有30分爆栈? 话说这题真的坑1e7没法写dfsdfsdfs 其实很好推式子. 考虑每个点安一个发动机的概率,推一波式子做个等比数列求和什么的可以证明出来是严格的1si ...

  5. 2018.10.17校内模拟赛:T2神光

    题面:pdf 首先排序,二分,然后怎么判定是否可行. 最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行.然后转移就行. 然后考试的时候就想到这了,往 ...

  6. 2018.10.17 学习如何使用Shiro

    参考学习https://www.javazhiyin.com/19502.html

  7. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  8. 退役前的记录(2018.10.14-NOIP2018)

    退役前的记录 诸位好,我是\(CJ\)最菜的\(Oier\),已经是\(G2\)的老年选手了,不知道什么时候就会退役了,总之\(G1\ double\)的机会已经没有了,去年因为联赛失利而止步,而今年 ...

  9. 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)

    20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

随机推荐

  1. Delphi的类方法不是静态方法

    Delphi中,类方法不是你理解的静态方法 Delphi中的类方法与C++类中的static方法完全没有可比性.Delphi中的类方法是有Self的,而Self就是类本身(注意不是对象),而这个Sel ...

  2. 使用单例模式设计PDO数据操作类

    <?php /** * MyPDO * @author LHL <506698615@qq.com> * @date 2016.04.20 */ class MyPDO{ prote ...

  3. 编辑xml文件时不能自动提示问题的解决

    在编辑xml文件时,eclipse总是不能自动提示,在网上找了一些资料,大部分都是说关于xml editor配置的,下面也把这个方法罗列在下面,以供参考: 解决办法:在eclipse的菜单里,找到wi ...

  4. 调用html进行android布局

    1. [代码]html代码     <html>  <head>    <meta http-equiv="content-type" content ...

  5. Gradle build-info.xml not found for module app.Please make sure that you are using gradle plugin '2.0.0-alpha4' or higher.

    解决方法:去掉“Enable Instant run to host swap code/resource changes on deploy(default enabled)”的勾选项 Settin ...

  6. Java(二)——开发环境搭建 安装JDK和配置环境变量

    1.安装JDK 下载地址  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载 ...

  7. [LeetCode] Shortest Distance from All Buildings Solution

    之前听朋友说LeetCode出了一道新题,但是一直在TLE,我就找时间做了一下.这题是一个比较典型的BFS的题目,自己匆忙写了一个答案,没有考虑优化的问题,应该是有更好的解法的. 原题如下: You ...

  8. Spring 事务管理高级应用难点剖析: 第 3 部分

    本文是“Spring 事务管理高级应用难点剖析” 系列文章的第 3 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括在使用 Spring JDBC 时如果直接获取 ...

  9. [CTSC 2018] 混合果汁

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5343 [算法] 对于每组询问 , 首先二分答案 显然 , 最优策略为优先选择价格低的 ...

  10. 蓝桥杯 2014本科C++ B组 李白打酒 三种实现方法 枚举/递归

    标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次, ...