Description

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

Input

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

Output

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

Sample Input

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
 

Sample Output

27
8
19  
 

Data Constraint

对于 30% 的数据,n, m ≤ 100。
对于另外 10% 的数据,n = m + 1。
对于另外 10% 的数据,n = m
对于 100% 的数据,n, m ≤ 3 × 10^5, xi ≤ yi,不存在重边、自环,不存在一条边同时存在于两个不同的简单环。
 
做法(摘自JZOJ):我们先 DFS 出图的每一个环,得到环上编号最小和最大的节点,那么合法的区间一定不 能同时跨过这两个点。于是我们搞出一个 R 数组,R[i] 表示以 i 作为左端点时右端点最右可 以到哪个位置。R 数组显然是单调递增的。 对于询问 l, r,我们二分出一个位置 i 满足 R[l . . . i − 1] ≤ r,R[i . . . r] ≥ r,直接计算即可
 #include <cstdio>
#include <cstring>
#include <iostream>
#define rep(i,a,b) for (int i=a;i<=b;i++)
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define N 500007
using namespace std;
int n,m,ls[N],tot,cnt,num,top,Q;
int dfn[N],low[N],stack[N];
int can[N];
long long sum[N]; struct edge{
int to,next;
}e[N*];
struct arr{
int mx,mi;
}a[N]; void Add(int x,int y){
e[++tot].to=y;
e[tot].next=ls[x];
ls[x]=tot;
} void Init(){
scanf("%d%d",&n,&m);
rep(i,,m){
int u,v;
scanf("%d%d",&u,&v);
Add(u,v);
Add(v,u);
}
} void tarjan(int x,int pre){
dfn[x]=low[x]=++num;
stack[++top]=x;
for (int i=ls[x];i;i=e[i].next){
int v=e[i].to;
if (v==pre) continue;
if (!dfn[v]){
tarjan(v,x);
low[x]=min(low[x],low[v]);
if (dfn[x]<=low[v]){
cnt++;
a[cnt].mi=1e9;
int tmp=top;
while(top){
int y=stack[top--];
a[cnt].mi=min(a[cnt].mi,y);
a[cnt].mx=max(a[cnt].mx,y);
if (y==v) break;
}
a[cnt].mi=min(a[cnt].mi,stack[top]);
a[cnt].mx=max(a[cnt].mx,stack[top]);
if (tmp-top>) can[a[cnt].mi]=min(can[a[cnt].mi],a[cnt].mx-);
}
}
else low[x]=min(low[x],dfn[v]);
}
} void Work(){
scanf("%d",&Q);
while(Q--){
int x,y;
long long ans=;
scanf("%d%d",&x,&y);
int l=x,r=y,pos;
while (l<=r){
int mid=(l+r)/;
if (can[mid]>=y) pos=mid,r=mid-;
else l=mid+;
}
ans=sum[pos-]-sum[x-];
ans+=(long long)(y-pos+)*(y-pos+)/;
printf("%lld\n",ans);
}
} int main(){
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
Init();
rep(i,,n) can[i]=n;
rep(i,,n) if(!dfn[i]) tarjan(i,);
for(int i=n-;i>=;i--) can[i]=min(can[i],can[i+]);
for(int i=;i<=n;i++) sum[i]=sum[i-]+(long long)(can[i]-i+);
Work();
}

JZOJ 5919. 逛公园的更多相关文章

  1. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

  2. Bzoj 1756: Vijos1083 小白逛公园 线段树

    1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1021  Solved: 326[Submit][Statu ...

  3. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

  4. JDOJ-P1260 VIJOS-P1083 小白逛公园

    首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec  Memor ...

  5. [NOIP2017] 逛公园

    [NOIP2017] 逛公园 题目大意: 给定一张图,询问长度 不超过1到n的最短路长度加k 的1到n的路径 有多少条. 数据范围: 点数\(n \le 10^5\) ,边数\(m \le 2*10^ ...

  6. [NOIp 2017]逛公园

    Description 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N$号点是公园的出口,每条边有一个非负权值, 代表策策经 ...

  7. 【NOIP 2017】逛公园

    Description 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要 ...

  8. 逛公园 [NOIP2017 D1T3] [记忆化搜索]

    Description 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的 ...

  9. [luogu P3953] [noip2017 d1t3] 逛公园

    [luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...

随机推荐

  1. Spring实践系列-入门篇(一)

    本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...

  2. Struts2_用Action的属性接收参数

    先在 Action 中定义要接收的属性,需要编写属性的getter 和 setter 方法 struts2 会自动帮我们把 String 类型的参数转为 Action 中相对应的数据类型. priva ...

  3. check_mk 之 Configuration variables

    Basic settings #check_parameters This is a configuration list assigning specific check parameters to ...

  4. 2013应届毕业生各大IT公司待遇整理汇总篇(转)

    不管是应届毕业生还是职场中人,在找工作时都必然会对待遇十分关注,而通常都是面试到最后几轮才知道公司给出的待遇.如果我们事先就了解大概行情,那么就会在面试之前进行比较,筛选出几个心仪的公司,这样才能集中 ...

  5. python3绘图示例4(基于matplotlib:箱线图、散点图等)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from matplotlib.pyplot import * x=[1,2,3,4]y=[5,4,3,2] # ...

  6. 【转载】#344 - Hidden Base Class Member Is Invoked Based on Declared Type of Object

    When you use the new modifier to hide a base class method, it will still be called by objects whose ...

  7. mysql5.6之前需要账号的安全加固

    mysql5.6之前需要账号的安全加固 从5.7开始就不需要了. delete from mysql.user where user!='root' or host='localhost'; flus ...

  8. 【LOJ115】无源汇有上下界可行流(模板题)

    点此看题面 大致题意: 给你每条边的流量上下界,让你判断是否存在可行流.若有,则还需输出一个合法方案. 大致思路 首先,每条边既然有一个流量下界\(lower\),我们就强制它初始流量为\(lower ...

  9. Codeblocks的常用Debug快捷键

    1.在鼠标处开始Debug,F4. 2.逐步调试,F7. 3.进入函数,shift+F7. 4.结束Debug,shift+F8.

  10. 2017.11.16 JavaWeb-------第八章 EL、JSTL、Ajax技术

    第八章 EL.JSTL.Ajax技术 ~~ EL (expression language) 是表达式语言 ~~ JSTL(JSP Standard Tag Library) 是开源的JSP标准标签库 ...