10.31T2 点双联通分量+预处理前缀+二分答案

2.逛公园I

 (parka)

 

【问题描述】

      琥珀色黄昏像糖在很美的远方,思念跟影子在傍晚一起被拉长……
      小 B 带着 GF 去逛公园,公园一共有 n 个景点,标号为 1 . . . n。景点之间有 m 条路径相连。
      小 B 想选择编号在一段区间 [l, r] 内的景点来游玩,但是如果这些景点的诱导子图形成了环,那么 GF 将会不高兴。
      小 B 给出很多个询问 [x, y],想让你求有多少个区间 [l, r] 满足 x ≤ l, r ≤ y 且不会使 GF不高兴。

【输入】

第一行为两个整数 n, m,表示景点和路径的数量。
第 2 . . . m + 1 行每行两个整数 ui, vi 表示第 i 路径的两端。
第 m + 2 行是一个整数 q 表示询问的个数,接下来 m 行每行两个整数 xi, yi 表示询问。

【输出】

q 行,每行一个整数表示答案。

【样例输入】

8 9

1 2

2 3

3 1

4 5

5 6

6 7

7 8

8 4

7 2

3

1 8

1 4

3 8

【样例输出】

27

8

19

 

【数据范围与约定】

对于 30% 的数据,n, m ≤ 100。
对于另外 10% 的数据,n = m + 1。
对于另外 10% 的数据,n = m
对于 100% 的数据,n, m ≤ 3 × 10^5, xi ≤ yi,不存在重边、自环,不存在一条边同时存在于两个不同的简单环。

提示诱导子图:

子图 G′ = (V′, E′),原图 G = (V, E)。V′ 是 V 的子集,E′ = {(u, v)|u, v ∈V′,(u, v) ∈ E}

 

 

 

 

本人&正解思路:
首先如果中间有个环并且为诱导子图,那么这个环的所有编号都在这个区间里面,显然如果我们包含这个环的编号最大最小值,就包括了这个环,如果缺了其中之一都不能说是在区间里面的诱导环

所以我们要先求点双联通分量,因为一个点可以在多个环里面

所以我们就可以知道转化成了这个问题,给定n条线段,每次询问一个区间中至少多少个子区间是不同时包括n条线段任何一条的左右端点的。

所以我们要考虑对于一个点它最远能延伸的地方

对于一个位置 i ,如果一条线段的左端点比它小显然这条线段是不会影响这个点的,因为它大于左端点所以不会覆盖这个整条线段

所以我们先把线段按左端点进行排序。

我们又知道这个最远的值Right[i]肯定是左端点比 i 大的某条线段右端点恰好左边一个的位置,也就是求左端点比 i 大的线段右端点的最小值

显然如果我们直接枚举肯定是不行的,所以我们可以倒序枚举排序后的线段,预处理出第 i 条线段以及之后比它左端点大的线段的右端点的最小值(有点绕)

所以我们在找点 i 的Right[i]的时候我们可以二分排序线段左端点的值,也就是恰好左端点比它大的线段,直接就可以知道右端点最小是多少了

然后就是处理区间L-R的问题了

对于一个区间我们要求所有的合法的子区间,所以我们可以求L,L+1,……R为左端点的合法区间,显然右端点要么是R,要么是Right[i],所以我们可以二分出或者单调队列得到这个区间中恰好Right[i]大于R的点Pos

Pos之前的点我们可以通过处理 i 到Right[i]区间长度的前缀和直接O(1)求到,Pos之后显然合法右端点都是R,可以等差数列做一做,就是答案了。

如果全用单调队列复杂度可以降到很低

code:

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<algorithm>
  5 #include<ctime>
  6 #define N 1000005
  7 #define lc (p<<1)
  8 #define rc (p<<1|1)
  9 #define max(i,j) (i>j?i:j)
 10 #define min(i,j) (i<j?i:j)
 11 using namespace std;
 12 int mx[N],mn[N];
 13 int n,m;
 14 struct node {
 15     int u,v;
 16 } e[N];
 17 int first[N],nxt[N],cnt;
 18 void add(int u,int v) {
 19     e[++cnt].u=u;
 20     e[cnt].v=v;
 21     nxt[cnt]=first[u];
 22     first[u]=cnt;
 23 }
 24 struct T {
 25     int l,r,id;
 26     T() {
 27         l=99999999;
 28     }
 29 } Lian[N],q[N];
 30 int low[N],top,bcc,dfn[N],siz[N],sign,stack[N],prt[N];
 31 void tarjan(int x) {
 32     low[x]=dfn[x]=++sign;
 33     stack[++top]=x;
 34     for(int i=first[x]; i; i=nxt[i]) {
 35         int v=e[i].v;
 36         if(v==prt[x])continue;
 37         if(!dfn[v]) {
 38             prt[v]=x;
 39             tarjan(v);
 40             low[x]=min(low[x],low[v]);
 41             if(low[v]>=dfn[x]){
 42                 int nowsiz=0;
 43                 int min0=n+1,max0=0;
 44                 int tmp=0;
 45                 do{
 46                     tmp=stack[top--];
 47                     nowsiz++;
 48                     max0=max(max0,tmp);
 49                     min0=min(min0,tmp);
 50                 }while(tmp!=v);
 51                 if(nowsiz==1)continue;
 52                 min0=min(min0,x);
 53                 max0=max(max0,x);
 54                 Lian[++bcc].l=min0;
 55                 Lian[bcc].r=max0;
 56             }
 57         } else low[x]=min(low[x],dfn[v]);
 58     }
 59 }
 60 bool cmp(const T&a,const T&b) {
 61     return a.l<b.l;
 62 }
 63 long long Right[N],Temp[N],Sum[N];
 64 int read() {
 65     int x=0,f=1;
 66     char c=getchar();
 67     while(!isdigit(c)) {
 68         if(c=='-')f=-1;
 69         c=getchar();
 70     }
 71     while(isdigit(c)) {
 72         x=(x<<3)+(x<<1)+c-'0';
 73         c=getchar();
 74     }
 75     return x*f;
 76 }
 77 long long Min[1000006];
 78 int main() {
 79 //    freopen("10.in","r",stdin);
 80 //    freopen("parka.out","w",stdout);
 81     n=read(),m=read();
 82     for(int i=1; i<=m; i++) {
 83         int a,b;
 84         a=read();
 85         b=read();
 86         add(a,b);
 87         add(b,a);
 88     }
 89     for(int i=1; i<=n; i++) {
 90         if(!dfn[i])tarjan(i);
 91     }
 92     sort(Lian+1,Lian+bcc+1,cmp);
 93     for(int i=1; i<=bcc; i++) {
 94         Temp[i]=Lian[i].l;
 95     }
 96     Min[bcc+1]=n+1;
 97     for(int i=bcc; i>=1; i--) {
 98         Min[i]=min(Min[i+1],Lian[i].r);
 99     }
100     for(int i=1; i<=n; i++) {
101         int pos=lower_bound(Temp+1,Temp+bcc+1,i)-Temp;
102         Right[i]=Min[pos]-1;
103         Sum[i]=Sum[i-1]+(Right[i]-i+1);
104     }
105     int Q;
106     cin>>Q;
107     for(int i=1; i<=Q; i++) {
108         int L,R;
109         L=read(),R=read();
110         int pos=lower_bound(Right+1,Right+n+1,R)-Right;
111         if(pos<=L)pos=L;
112         long long Ans=Sum[pos-1]-Sum[L-1];
113         Ans+=(long long)(R-pos+1)*(long long)(R-pos+2)/2;
114         cout<<Ans<<'\n';
115     }
116     return 0;
117 }

over

转载于:https://www.cnblogs.com/saionjisekai/p/9883881.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL学习笔记之存储过程的编写

今天写几个存储过程&#xff0c;觉得有这个必要记录下来&#xff0c;方便以后忘了也好有个备份&#xff0c;都很简单&#xff0c;高手可以不用看的。一、记录的插入--region [dbo].[InsertArchive]--------------------------------------------------------------------------…

应用安全-操作系统安全-漏洞修复整理

FTP弱密码 将FTP服务器的密码更改为强密码 vi /etc/vsftpd/vsftpd.conf anonymous_enableNO #禁止匿名登录 重启ftp服务 Windows匿名用户整改参考&#xff1a; https://www.jb51.net/article/135347.htm View CodeSSH弱密码 修改ssh配置文件&#xff1a; 1.修改iptables 首先要…

【2.0】SpringBoot连接MySql 8.0的url设置

jdbc:mysql://localhost:3306/enterprise?useUnicodetrue&amp&useSSLfalse&amp&characterEncodingUTF-8&amp&serverTimezoneGMT%2B8

Java自定义JSlider UI

Java自定义JSlider UI JSlider作为Swing中提供的滑标组件&#xff0c; 以图形方式在有界区间内通过移动滑块来选择值&#xff0c;滑块可以显示主刻度标记和次刻度标记。大量应用于如播放器中的音量设定等领域中。但是JSlider本身提供的UI样式很单调&#xff0c;不足以满足用户的…

Chrome OS 云里雾里

昨天Google发布了ChromeOS&#xff0c;之前有牛人编译了它的源码并创建了虚拟机分享出来。具体的BT种子不记得了&#xff0c;有需要的可以搜索一下chromeos-image-999.999.32309.211410-a1.vmdk.bz2。看看哪还有种子可用。文件大概287M左右&#xff0c;解压后大概7、8百M。当下…

C++基础学习一(基础之基础)

开篇&#xff1a;做了这么多年的软件&#xff0c;第一次使用博客的方式记录学习过程&#xff0c;之前都是笔记本&#xff08;都有一摞了&#xff09;&#xff0c;因为之前一直从事的都是.NET的开发工作&#xff0c;对C知之甚少&#xff0c;但一直想了解C这门鼻祖级的语言&#…

二叉树的遍历方式

2019独角兽企业重金招聘Python工程师标准>>> 二叉树遍历方式有三种&#xff1a;前序遍历&#xff0c;中序遍历&#xff0c;后序遍历&#xff08;其实还有一个层序遍历&#xff09; 使用两种方式来实现三种遍历&#xff1a; 1. 使用递归的方式实现 1&#xff09;&…

非常恶俗地分享一首歌曲(子陵·周郎顾)

歌词 [hjp3]hjptypesong&player5&filehttp://file.hjbbs.com/ayi/share/mp3/zhoulanggu.mp3&backColor990000&frontColorddddff&autoStarttrue&showDownloadtrue&width310&height20[/hjp3]子陵周郎顾 绿绮轻拂刹那玄冰破&#xff0c; 九霄仙音…

that is why用法

释义&#xff1a;这就是为什么&#xff0c;因此 Thats why I was getting married. ---《老友记》 第一季 第一集 这就是我为什么结婚的原因。 例句&#xff1a; Mr. Gorbachev, on the other hand, recognized that his sluggish and authoritarian bureaucracy was the worst…

阿里云超算集谛优化GPU异构并行性能:GROMACS

“集谛”是一款内置于阿里云弹性高性能计算(Elastic High Performance Computing&#xff0c;E-HPC)的云上性能监控与分析引擎&#xff0c;支持集群资源利用情况的实时监控和用户作业运行情况的在线分析。对于采用GPU加速的异构计算应用场景&#xff0c;“集谛”除了监控节点ho…

日本常用网址

1.Yahoo&#xff01;Japan http://www.yahoo.co.jp 2.价格.com http://www.kakaku.com 购买商品前必看的网站&#xff0c;不仅仅是为了得到相对最低的价格信息&#xff0c;更重要的是获取关于同类商品不同品牌型号的评价和比较。 3.乐天 http://www.rakuten.co.jp 日本最…

MySQl看这一篇就够了

MySQl看这一篇就够了 MySQL分享 一、数据库结构 语句 DDL&#xff08;Data Definition Languages&#xff09;&#xff1a;数据定义语句&#xff0c;常用的语句关键字主要包括 create、drop、alter等操作表结构 DML&#xff08;Data Manipulation Language&#xff09;&#xf…

IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)

JetBrains公司的intellij Idea堪称JAVA编程界的苹果&#xff0c;用户体验非常好 下面介绍一下IDEA的一个能显著提升写代码效率的非常好用的功能设置—— Auto Import Auto Import的功能是可以帮助我们自动删除无用的包Import(未被引用)&#xff0c;以及自动Import填充尚未导入的…

怎么看网站是否被黑防止网站被黑

2019独角兽企业重金招聘Python工程师标准>>> 网站被黑&#xff0c;打开网站竟然跳转到博cai网站上去了&#xff0c;一开始以为自己看错了&#xff0c;多次从百度点击自己网站进去&#xff0c;还是会跳转到彩piao网站上&#xff0c;第一反应是自己的网站被黑了&#…

c#事务的使用、示例及注意事项

一、事务的介绍.NET Framework 开发员指南事务是一组组合成逻辑工作单元的操作&#xff0c;虽然系统中可能会出错&#xff0c;但事务将控制和维护事务中每个操作的一致性和完整性。例如&#xff0c;在将资金从一个帐户转移到另一个帐户的银行应用中&#xff0c;一个帐户将一定的…

镜像服务器文件实时监控同步程序

这是为我们网站解决南北电信网通互联互通问题而写的一个程序。 优游中国(www.yooyocn.com)是一个大型旅游门户网站&#xff0c;提供了资讯&#xff0c;视频&#xff0c;图片&#xff0c;博客&#xff0c;论坛等大数据量的业务内容。 为了使全国各地的网友都能够快速访问我们的网…

Nginx学习系列二Linux下Nginx实现负载均衡

关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1、启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限需要),接着找到Nginx的安装目录,启动Nginx,并且指定Nginx启动所需的配置文件,该文件也在Nginx的安装目录下. 2、查看…

FastCGI中文规范

http://fuzhong1983.blog.163.com/blog/static/1684705201051002951763/ . 介绍 FastCGI是对CGI的开放的扩展&#xff0c;它为所有因特网应用提供高性能&#xff0c;且没有Web服务器API的缺点&#xff08;penalty&#xff09;。 本规范具有有限的&#xff08;narrow&#xff09…

设计模式初学者系列-策略模式 -------为什么总是继承

设计模式初学者系列&#xff0d;策略模式 -------为什么总是继承 模板方法的延续 这篇稿子是基于我的前一篇模板方法设计模式之上演绎的&#xff0c;如果没有阅读请点击这里查看&#xff0c;以了解这篇稿子的上下文。 在模板方法设计模式里我举了一个例子&#xff1a;教育部…

红米airdots掉了怎么查找_红米K30 Pro 荣耀V30pro 这两款手机该怎么选呢?

点击?玩机数码君?关注我&#xff0c;加★星标★你好 我是岁月神偷昨天可以说是小米拍手称快的一天&#xff0c;红米K30 Pro以2999的超低价成为目前最便宜的骁龙865旗舰&#xff0c;让友商拍马难追。友商明眼人都知道说的华为&#xff0c;怎么感觉小米每次发布会也替华为宣传了…