原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5218

友好城市

Description

在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接。对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么它们就会被认为是一对友好城市。Byteland 的交通系统十分特殊,第i 天只有编号在[li, ri] 的单向公路允许通行,请写一个程序,计算每天友好城市的对数。
注意:(a, b) 与(b, a) 没有区别。

Input

第一行包含三个正整数n, m, q,分别表示城市的个数、单向公路的条数以及询问的天数。
接下来m 行,每行两个正整数ui, vi,表示一条从城市ui 出发,通往城市vi 的单向道路。
接下来q 行,每行两个正整数li, ri,表示一个询问。
1 ≤ ui, vi ≤ n, ui != vi, 1 ≤ li ≤ ri ≤ m。N<=150,M<=300000,Q<=50000

Output

输出q 行,每行一个整数,即友好城市的对数。

Sample Input

3 3 3
1 2
2 3
2 1
1 1
1 2
1 3

Sample Output

0
0
1

题解

跟HDU6072 Logical Chain实际上是一样的,加个莫队就能A,虽然正解是用分块+ST表维护边表。

代码

大家都加的莫队凭什么我被卡常???明明BZOJ过得贼快。

#include<bits/stdc++.h>
#define uint unsigned int
#define lg(x) __builtin_ctz(x)
using namespace std;
const int M=160,bit=31,N=3e5+5;
const uint inf=0xffffffff;
struct sd{int a,b,id;}ed[N],ask[N];
uint mmp[M][M/bit],mmp2[M][M/bit],vis[M/bit];
int cot[M],sta[M],ans[N],cnt[M][M],top,T,n,m,q,tot,siz;
bool operator<(sd x,sd y){return x.a/siz==y.a/siz?((x.a/siz&1)?x.b<y.b:x.b>y.b):x.a/siz<y.a/siz;}
void dfs1(int v){vis[v>>5]&=inf^(1<<(v&bit));for(int i=0;i<=(n>>5);++i)for(;mmp2[v][i]&vis[i];)dfs1(lg(mmp2[v][i]&vis[i])+(i<<5));sta[++top]=v;}
void dfs2(int v){vis[v>>5]&=inf^(1<<(v&bit)),++cot[tot];for(int i=0;i<=(n>>5);++i)for(;mmp[v][i]&vis[i];dfs2(lg(mmp[v][i]&vis[i])+(i<<5)));}
int work()
{int i,ans;memset(cot,tot=top=ans=0,sizeof(cot));for(memset(vis,255,sizeof(vis)),i=1;i<=n;++i)if(vis[i>>5]>>(i&bit)&1)dfs1(i);for(memset(vis,255,sizeof(vis)),i=top;i>=1;--i)if(vis[sta[i]>>5]>>(sta[i]&bit)&1)++tot,dfs2(sta[i]);for(int i=1;i<=tot;++i)ans+=cot[i]*(cot[i]-1)/2;return ans;
}
void add(int x){int a=ed[x].a,b=ed[x].b;if(!cnt[a][b]++)mmp[a][b>>5]|=1<<(b&bit),mmp2[b][a>>5]|=1<<(a&bit);}
void del(int x){int a=ed[x].a,b=ed[x].b;if(!--cnt[a][b])mmp[a][b>>5]&=inf^(1<<(b&bit)),mmp2[b][a>>5]&=inf^(1<<(a&bit));}
void in()
{scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=m;++i)scanf("%d%d",&ed[i].a,&ed[i].b);for(int i=1;i<=q;++i)scanf("%d%d",&ask[i].a,&ask[i].b),ask[i].id=i;
}
void ac()
{siz=sqrt(m);sort(ask+1,ask+1+q);int le=1,ri=1,i;for(add(1),i=1;i<=q;++i){for(;le<ask[i].a;del(le++));for(;le>ask[i].a;add(--le));for(;ri<ask[i].b;add(++ri));for(;ri>ask[i].b;del(ri--));ans[ask[i].id]=work();}for(int i=1;i<=q;++i)printf("%d\n",ans[i]);
}
int main(){in(),ac();}

BZOJ5218[Lydsy2017省队十连测] 友好城市相关推荐

  1. bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树

    [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 93  Solved: 53 [Submit][Status ...

  2. BZOJ5243 : [Lydsy2017省队十连测]绝版题

    要找的就是这棵树的带权重心,以带权重心为根时每棵子树的权值和不超过总权值和的一半. 因此按$\frac{v[i]}{\sum v[i]}$的概率随机选取一个点$x$,则重心有$\frac{1}{2}$ ...

  3. BZOJ5217: [Lydsy2017省队十连测]航海舰队

    被FFT的空间卡了半天 后来发现根本不用开那么大- 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串匹配 ...

  4. [Lydsy2017省队十连测]航海舰队

    SOL: 我们用FFT匹配字符串. 不知道为什么我的NTT挂了,贴一个别人的FFT. #include<bits/stdc++.h> #define ll long long #defin ...

  5. BZOJ5217: [Lydsy2017省队十连测]航海舰队 FFT

    被FFT的空间卡了半天 后来发现根本不用开那么大... 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串 ...

  6. 2017.10.24队内互测——压轴出场的互测终曲|(*_-)

    出题人: Sherlock, Frank, WWQ, MurasameKatana 终于到了我们组出题啦. 题面都是我自己写的2333 Problem 1 :令咒 题目来源:http://codevs ...

  7. winpcap基本原理及常见应用_碳十四测年的基本原理和常见应用谬误

    如果说地层学原理是18世纪地质学给19世纪考古学的重要礼物,那么放射性碳定年法就是20世纪考古学最重要的进步之一.这两种方法都对年代判定做出了重要的贡献,因为若是没有某种类型的年代测定,我们就不可能建 ...

  8. 十大司机如厕友好城市出炉:苏州/杭州/成都位居前三

    4月1日消息,近日,高德地图发布<2022全国公共厕所图鉴>(下称,<图鉴>),依据近百个城市2021年公共厕所线上搜索和导航数据,选出了十大厕所数字化城市.十大司机如厕友好城 ...

  9. 【bzoj 十连测】[noip2016十连测第三场]Problem C: 序列(静态主席树)

    Problem C: [noip2016十连测第三场]序列 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 78  Solved: 32 [Submi ...

  10. 2017.9.16队内互测——老年组Day1

    2017.9.16队内互测--老年组Day1 出题人:feather,MeiCo,Summer,Black Problem 1: 对于100%的数据,n<=1000 截图比较奇怪-还请见谅 简单 ...

最新文章

  1. js中every用法_every方法
  2. 2012 ARM嵌入式开发应用研讨会杂谈
  3. cookie、session以及token的定义、区别、使用环境
  4. Jinja2模板引擎简介
  5. 【ABAP】Smartforms无法打印字符串中空格问题处理
  6. linux上的那些查找的命令
  7. springboot tomcat启动
  8. vs 调用matlab引擎,vs2010 matlab混合编程调用matlab引擎
  9. kali文件重命名_硬核教程,必看!「网络安全入门」四、文件上传漏洞
  10. python嵌套字典的建立_python学习之第八篇——字典嵌套之字典中嵌套字典
  11. 氩弧焊机的电气图_氩弧焊机的工作原理以及接线图
  12. 关于 戴尔G3 NVIDIA 1050TI 显卡驱动无法使用的解决办法
  13. 隆重纪念鲁宾逊诞辰,不走样,不离谱
  14. php程序员拜年代码,2018程序员拜年的奇思妙想,涨姿势了
  15. IAR代码溢出问题处理section placement failed
  16. 美式英语音标词对照表
  17. 华为LOGO是什么意思?看完任正非的解释,再看网友的解释,笑出声
  18. 万门mysql_万门DX-MySQL零基础特训班
  19. Windows 系统中添加防火墙规则
  20. 金融是不是一群不事生产的人,对社会毫无贡献的人,互相对赌的零和游戏?

热门文章

  1. datepicker不能选择是为什么_为什么婚车不能倒退 婚车不能走回头路吗
  2. 能力提升综合题单 Part 8.9.1 最大流
  3. java单例模式 实例_java 单例模式的实例详解
  4. 简单async数据分批处理
  5. poj3274 找平衡数列(哈希加一点数学思维)
  6. 《团队-团队编程项目作业名称-最终程序》
  7. 纯html网页重定向与跳转
  8. 了解轻量级的移动开发Javascript类库- Zepto.js
  9. 虚拟化应用(三)Hyper-V 2.0 初探
  10. Spring的9种设计模式(一)