bzoj 5218: [Lydsy2017省队十连测]友好城市
题意:


这题显然直接tarjan是做不了的。
这里安利另一个求SCC的算法Kosaraju,学习的话可以见这篇博客
于是结合莫队,我们有了个暴力。
发现主要瓶颈是dfs过程中找最小的未经过的点,我们用bitset优化一下就过了。
注意有重边,不能直接在biset中删除,要开个邻接矩阵判一下。
code:
#include<bits/stdc++.h>
using namespace std;
#define re register
typedef long long ll;
const int maxn=200;
const int maxm=3*1e5+10;
const int maxq=50010;
int n,m,Q,t,block,nowl=1,nowr,tot,cnt;
int pos[maxm],size[maxn],a[maxn];
int cnt1[maxn][maxn],cnt2[maxn][maxn];
ll ans[maxq];
struct Edge{int u,v;}E[maxm];
struct Query{int l,r,id;}qr[maxq];
bitset<maxn>vis;
bitset<maxn>e1[maxn],e2[maxn];
inline int read()
{
re char c=getchar();re int res=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')res=res*10+c-'0',c=getchar();
return res*f;
}
char num[35];
inline void write(ll x)
{
if(!x){putchar('0');return;}
re ll tmp=x>0?x:-x;
if(x<0)putchar('-');
re int cnt=0;
while(tmp>0)
{
num[cnt++]=tmp%10+'0';
tmp/=10;
}
while(cnt>0)putchar(num[--cnt]);
}
inline bool cmp(Query x,Query y)
{
if(pos[x.l]==pos[y.l])
{
if(pos[x.l]&1)return x.r<y.r;
else return x.r>y.r;
}
else return x.l<y.l;
}
inline void add(int id)
{
re int x=E[id].u,y=E[id].v;
cnt1[x][y]++,cnt2[y][x]++;
if(cnt1[x][y]==1)e1[x].set(y);
if(cnt2[y][x]==1)e2[y].set(x);
}
inline void del(int id)
{
re int x=E[id].u,y=E[id].v;
cnt1[x][y]--,cnt2[y][x]--;
if(!cnt1[x][y])e1[x].reset(y);
if(!cnt2[y][x])e2[y].reset(x);
}
void dfs1(int x)
{
vis.reset(x);
bitset<maxn>now=vis&e1[x];
while(now.any())
{
dfs1(now._Find_first());
now&=vis;
}
a[++cnt]=x;
}
void dfs2(int x)
{
size[tot]++;vis.reset(x);
bitset<maxn>now=vis&e2[x];
while(now.any())
{
dfs2(now._Find_first());
now&=vis;
}
}
inline ll solve()
{
memset(size,0,sizeof(size));
vis.set();cnt=tot=0;
re ll res=0;
for(re int i=1;i<=n;i++)if(vis.test(i))dfs1(i);
vis.set();
for(re int i=cnt;i;i--)if(vis.test(a[i]))tot++,dfs2(a[i]);
for(re int i=1;i<=tot;i++)res+=size[i]*(size[i]-1)/2;
return res;
}
int main()
{
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
n=read(),m=read(),Q=read();
for(re int i=1;i<=m;i++)E[i].u=read(),E[i].v=read();
for(re int i=1;i<=Q;i++)qr[i].l=read(),qr[i].r=read(),qr[i].id=i;
t=pow(m,1.0*3/5);
for(re int i=1;i<=m;i++)pos[i]=(i-1)/t+1;
sort(qr+1,qr+Q+1,cmp);
for(re int i=1;i<=Q;i++)
{
while(nowl<qr[i].l)del(nowl++);
while(nowl>qr[i].l)add(--nowl);
while(nowr<qr[i].r)add(++nowr);
while(nowr>qr[i].r)del(nowr--);
ans[qr[i].id]=solve();
}
for(re int i=1;i<=Q;i++,puts(""))write(ans[i]);
return 0;
}
bzoj 5218: [Lydsy2017省队十连测]友好城市的更多相关文章
- 2018.09.26 bzoj5218: [Lydsy2017省队十连测]友好城市(回滚莫队)
传送门 比较简单的一道回滚莫队吧. 每次询问用bitset优化kosaraju统计答案. 就是有点难调. 然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt ...
- bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 93 Solved: 53[Submit][Status][ ...
- bzoj 5216: [Lydsy2017省队十连测]公路建设
5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 66 Solved: 37[Submit][St ...
- bzoj 5217: [Lydsy2017省队十连测]航海舰队
Description Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格图,其中有些位置是" .",表示这一格是海水,可以通过:有些位置 ...
- BZOJ 5215: [Lydsy2017省队十连测]商店购物
裸题 注意+特判 #include<cstdio> using namespace std; const int mod=1e9+7; int F[1000005],mi[10000005 ...
- @bzoj - 5219@ [Lydsy2017省队十连测]最长路径
目录 @description@ @solution@ @accepted code@ @details@ @description@ 在Byteland一共有n个城市,编号依次为1到n,形成一个n个 ...
- Lydsy2017省队十连测
5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. //A ...
- 【BZOJ 5222】[Lydsy2017省队十连测]怪题
题目大意: 传送门 给一个长度为$n(n<=200)$的数列$h$,再给$m$个可以无限使用的操作,第$i$个操作为给长度为花费$c_i$的价值给长度为$l_i$的数列子序列+1或-1,求将数列 ...
- 2018.09.26 bzoj5221: [Lydsy2017省队十连测]偏题(数学推导+矩阵快速幂)
传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙 ...
随机推荐
- 25.Zabbix入门必备
==Zabbix入门必备== 1.配置zabbix源 [root@zabbix ~]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Of ...
- vue常见问题处理 -- 页面刷新时,如何保持原有vuex中的state信息
一.页面刷新时,如何保持原有vuex中的state信息 页面刷新后,原有的 vuex 中的 state 会发生改变,如果在页面刷新之前,可以将 state 信息保存,页面重新加载时,再将该值赋给 st ...
- 过滤器(Filter)对登陆页面进行过滤验证
import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServl ...
- MinU: v2 Vulnhub Walkthrough
主机层面扫描: 22 和 3306 端口 3306 端口默认是MySQL端口,但是这里尝试爆破报错,最后通http访问发现非MySQL协议,而是一个http的服务 http的协议我们进行目录枚举下 枚 ...
- iOS----------jenkins
错误日志: ERROR: Error fetching remote repo 'origin' Finished: FAILURE ERROR: Error cloning remote repo ...
- 入职小白随笔之Android四大组件——广播详解(broadcast)
Broadcast 广播机制简介 Android中的广播主要可以分为两种类型:标准广播和有序广播. 标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播 ...
- SAP之RFC_READ_TABLE
RFC_READ_TABLE 是SAP系统自带的RFC函数,用于读取SAP数据库表的结构和数据.使用方法如下: IMPORTINGQUERY_TABLE:读取的表名DELIMITER:输出字段(DAT ...
- Vue 03
目录 组件 组件的分类 组件的特点 组件的使用 组件传参-父传子 组件传参-子传父 组件 组件就是html, css和js文件的集合体, 实现对代码的复用, 组件就是vue对象 组件的分类 根组件 & ...
- H5移动端开发遇见的东西
常见的有viewport.强制浏览器全屏.IOS的Web APP模式.可点击元素出现阴影 本文主要讲一些其他的或者实用的优化手段. 1. 弹出数字键盘 <!-- 有"#" & ...
- UI 自动化框架设想
测试框架选型: 首先,通过利用TestNG结合csv的使用,将测试用例数据转化为测试代码中的数据,减少了测试人员录入数据和准备数据的工具: 再次,通过对appium的封装,按照面向对象的思想将测试中用 ...