【题目】

传送门

题目描述:

IcePrincess_1968 和 IcePrince_1968 长大了,他们开始协助国王 IceKing_1968 管理国内事物。

IcePrincess_1968 和 IcePrince_1968 住在一个宁静悠远的王国:IceKingdom —— 飘雪圣域。飘雪圣域有 nnn 个城镇,编号 1,2,3,...,n1,2,3,...,n1,2,3,...,n。有些城镇之间有道路,且满足任意两点之间有且仅有一条路径。飘雪圣域风景优美,但气候并不是太好。根据 IcePrince_1968 的气候探测仪,将来会发生 qqq 场暴风雪。每场暴风雪可以用两个整数 li,ril_i,r_ili​,ri​ 刻画,表示这场暴风雪之后,只有编号属于 [  li  ,  ri  ][\;l_i\;,\;r_i\;][li​,ri​] 的城市没有受到暴风雪的影响。

在暴风雪的影响下迅速确定王国的农业生产方案是非常重要的事情。IceKing_1968 认为,一个农业生产地域应该是一个极大连通块,满足每个节点都没有被暴风雪影响。这里极大连通块的定义是:不存在一个不属于该点集的未被暴风雪影响的点与该连通块连通。

IcePrincess_1968 要负责算出每次暴风雪后,王国能拥有多少个农业生产地域。注意这里每次暴风雪是独立的,即每次暴风雪过后,直到每个城镇重新焕发生机,下一次暴风雪才会到来。

正如上文所述,IcePrincess_1968 擅长文学但不擅长计算机,于是请你帮忙。

输入格式:

第一行包含两个正整数 n,qn,qn,q,表示 IceKingdom 的城镇个数和暴风雪次数。

​第 222 至第 nnn 行,每行两个正整数 x,yx,yx,y,表示城镇 xxx 和城镇 yyy 之间有一条道路。

​ 第 n+1n+1n+1 至第 n+qn+qn+q 行,每行两个正整数 li,ril_i,r_ili​,ri​,描述一场暴风雪,含义如题面所述。

输出格式:

输出文件共有 qqq 行,第 iii 行表示在第 iii 场暴风雪之后农业生产地域的个数。

样例数据:

输入
4 3
1 2
2 3
2 4
1 2
1 3
3 4

输出
1
1
2

提示:

【输入输出样例 111 解释】

​第一次询问,只有 (1,2)(1,2)(1,2) 一个连通块。

​第二次询问,只有 (1,2,3)(1,2,3)(1,2,3) 一个连通块。

​第三次询问,有 333 和 444 两个连通块。

【数据规模】

对于 30%30\%30% 的数据:n≤100n\le100n≤100,q≤100q\le100q≤100;

对于 50%50\%50% 的数据:n≤2,000n\le2,000n≤2,000,q≤2,000q\le2,000q≤2,000;

对于 100%100\%100% 的数据:n≤200,000n\le200,000n≤200,000,q≤200,000q\le200,000q≤200,000,对于所有的暴风雪,li≤ril_i\le r_ili​≤ri​。

【分析】

事实上,我们可以把这道题转换一下。

对于一条边 (u,v)(u,v)(u,v),如果 uuu 和 vvv 两个点都没有被影响,就称 (u,v)(u,v)(u,v) 为好边。

那么每一条好边都可以使两端点所在的连通块连接起来,使总连通块个数 −1-1−1。

因此假如有 numnumnum 条好边,对于询问 [  li  ,  ri  ][\;l_i\;,\;r_i\;][li​,ri​] 的答案就是 ri−li+1−numr_i-l_i+1-numri​−li​+1−num。

对于一条边 (u,v)(u,v)(u,v),我们不妨令 u&lt;vu&lt;vu<v。

那么,我们相当于是求满足 li≤u&lt;v≤ril_i\le u&lt;v\le r_ili​≤u<v≤ri​ 的边的条数。

那我们把询问离线下来,用一个树状数组解决就行了。

【代码】

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define N 200005
#define lowbit(x) (x&-x)
#define Pair pair<int,int>
using namespace std;
vector<int>E[N];
vector<Pair>Q[N];
int n,q,bit[N],ans[N];
void add(int i,int x)
{for(;i<=n;i+=lowbit(i))  bit[i]+=x;
}
int query(int i)
{int ans=0;for(;i;i-=lowbit(i))  ans+=bit[i];return ans;
}
int main()
{int x,y,i,j;scanf("%d%d",&n,&q);for(i=1;i<n;++i){scanf("%d%d",&x,&y);if(x>y)  swap(x,y);E[y].push_back(x);add(x,1);}for(i=1;i<=q;++i){scanf("%d%d",&x,&y);Q[y].push_back(make_pair(x,i));}for(i=n;i;--i){for(j=0;j<Q[i].size();++j){int sum=query(i)-query(Q[i][j].first-1);ans[Q[i][j].second]=(i-Q[i][j].first+1)-sum;}for(j=0;j<E[i].size();++j)  add(E[i][j],-1);}for(i=1;i<=q;++i)printf("%d\n",ans[i]);return 0;
}

【2019/02/18测试T3】飘雪圣域相关推荐

  1. 【提高测试】飘雪圣域(树状数组)

    描述 ​ IcePrincess_1968 和 IcePrince_1968 长大了,他们开始协助国王 IceKing_1968 管理国内事物. ​ IcePrincess_1968 和 IcePri ...

  2. 【2019/08/05测试 T3】凫趋雀跃

    传送门 problem 有一个网格,每一步可以走 ( 0 - M x , 0 - M y ) (0-Mx,0-My) (0-Mx,0-My) 中任意非零向量. 有 K K K 种向量不能走,分别是 ( ...

  3. 《惢客创业日记》2019.02.18(周一)不玩手机还能干什么?

    由于昨天是有声书分享日,因此,今天的日记分享昨天一件有趣的体验.昨天是周日,按照惯例,一般都是在家干活.由于跟儿子约好了做一次特殊的体验,如果在家里,干扰会很多.因此我就跟儿子一起来到了公司干活. 说 ...

  4. Unity3d 周分享(17期 2019.5.18 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. [Unity]介绍可以在游戏画面上显示FPS,内存,音频,设备信息的" ...

  5. 20190218【梦境】【玩具】【飘雪圣域】

    贪心 玄学DP 树状数组 T1[梦境] WOJ 707070分 网络流跑二分图 #include<bits/stdc++.h> using namespace std; inline in ...

  6. 2019/4/18,第一次团队任务

    2017*****1066 我是骆树仁,此博客的撰写人 我所在小队为1号队伍,组成成员为: 李昊 杨韵昊 蔡澄阳 冯志勇 骆树仁(队长) 刘绮龙 我们的队名是:L'Internationale 这是我 ...

  7. 分类导航(更新时间:2019.1.18)

    原文链接:http://www.cnblogs.com/kexing/archive/2018/02/18/8341039.html 可能会有所遗漏,善用搜索和标签功能 我的第一个Android开源库 ...

  8. 18天精读掌握《费曼物理学讲义卷一》 第5天 2019/6/18

    18天精读掌握<费曼物理学讲义卷一> 第5天 2019/6/18 1. 18日掌握<费曼物理学讲义>卷一计划概览 2. 今日学习成果 3. 今日时间表 4.Atimelogge ...

  9. 2019.12.18

    2019.12.18 bool canBeEqual(vector<int>& target, vector<int>& arr) {if (target.si ...

  10. 2019年免费测试SRRC认证哪里办

    2019年免费测试SRRC认证哪里办 中国SRRC国家无线电管理委员会State Radio Regulatory Commission of the People's Republic of Chi ...

最新文章

  1. RDKit | 比较化合物并通过PCA可视化化学空间
  2. Java基础学习总结(8)——super关键字
  3. Android 最火的快速开发框架XUtils
  4. 数据挖掘导论读书笔记1
  5. windows结束线程的三种方式
  6. js 格式化日期 (/Date(1400046388387)/)
  7. 全排列变种:限定 排列的差值范围 及 排列中的元素个数
  8. 利用Maven快速创建一个简单的spring boot 实例
  9. Java开发必看JPA概念大全
  10. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
  11. 数据恢复技术在计算机犯罪侦查中的应用,浅谈数据恢复技术在计算机犯罪侦查中的应用...
  12. mysql 强项_mysql数据目录迁移
  13. 由echarts想到的js中的时间类型
  14. rk3399_android7.1平台调试sensor流程记录
  15. 1《游戏脚本高级编程》之命令脚本的随想
  16. 阿里研究员赵海平:生物与计算机交织的独特人生
  17. 群辉docker安装树莓派镜像_群晖 Docker 安装 AriaNg+File Browser
  18. 基于 python 和 UDP 协议实现简易聊天室(多人群聊)----详细解析带字幕
  19. Echars的下载和使用
  20. 利用R语言实现OCR的笔记

热门文章

  1. 【281期】面试官问:淘宝七天自动确认收货,可以怎么实现?
  2. 顶尖量化私募“分家产”!学霸基金经理离职,代码产权归属成看点
  3. Edison C++编程笔记
  4. [用友]报表格式异常的处理
  5. mysql的服务被删了怎么办_三、MySQL服务构成、基本操作、误删所有用户后的恢复方法...
  6. PowerDesigner破解版下载及安装教程
  7. 单片机_rom_ram,程序容量之迷
  8. P2P软件工作原理是什么?
  9. 浅谈Sun Solaris启动
  10. 黑客专用文本编辑器Emacs中文手册