【题解】Luogu P5068 [Ynoi2015]我回来了
众所周知lxl是个毒瘤,Ynoi道道都是神仙题,这道题极其良心,题面好评
原题传送门
我们先珂以在\(O(n^2)\)的时间内bfs求出任意两点距离
我们考虑如何计算从一个点到所有点的最短路长度小于等于k的点的数量
我们先求出来从一个点到所有点的最短路长度等于k的点的数量,这个珂以在bfs搜索过程中完成
统计最短路长度小于等于k的点的数量珂以使用前缀和
这里明显不好直接前缀和,我们可以使用bitset来维护一个点到所有点的最短路长度小于等于k的点的数量,如果一位是1,就代表满足条件,否则不满足条件
做前缀和时就直接用“|”就行了、
以上搜索和前缀和的复杂度为\(O(\frac {n^3}{\omega})\)(\(\omega\)是一个常数,这里珂以取32)
最后询问时开一个bitset,把所有条件的答案“|”起来,就是求出满足条件点的个数,最后输出这个bitset的count(),也就是1(满足)的个数
查询的复杂度为\(O(\frac {n \sum_{i=1}^{q} a_i}{\omega})\)
这道题存边不能用链式前向星,链式前向星会tle,因为地址不是连续的,所以用vector存边就行了qaq
总复杂度为\(O(\frac {n^3+n \sum_{i=1}^{q} a_i}{\omega})\)
#include <bits/stdc++.h>
#define N 1010
#define M 100010
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
vector <int> to[N];
int n,m,q;
int dis[N][N];
bitset <N> dissum[N][N];
inline void bfs(register int x,register int id)
{
for(register int i=1;i<=n;++i)
dis[id][i]=1005;
queue <int> q;
q.push(x);
dis[id][x]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
for(register int i=0;i<to[u].size();++i)
if(dis[id][to[u][i]]==1005)
{
dis[id][to[u][i]]=dis[id][u]+1;
q.push(to[u][i]);
}
}
for(register int i=1;i<=n;++i)
dissum[id][dis[id][i]].set(i);
for(register int i=1;i<=n;++i)
dissum[id][i]|=dissum[id][i-1];
}
int main()
{
n=read(),m=read(),q=read();
while(m--)
{
int u=read(),v=read();
to[u].push_back(v),to[v].push_back(u);
}
for(register int i=1;i<=n;++i)
bfs(i,i);
while(q--)
{
bitset <N> ans;
int x=read();
while(x--)
{
int u=read(),k=read();
ans|=dissum[u][k];
}
write(ans.count()),puts("");
}
return 0;
}
【题解】Luogu P5068 [Ynoi2015]我回来了的更多相关文章
- Luogu P5068 [Ynoi2015]我回来了
题目 Ynoi难得的水题. 首先我们可以\(O(n^2)\)地求出任意两点之间的距离. 然后我们可以\(O(n^3)\)地求出对于任意一个点\(u\),跟它距离\(\le d\)的点的集合. 然后对于 ...
- [洛谷P5068][Ynoi2015]我回来了
题目大意:给你一张$n(n\leqslant10^3)$个点$m(m\leqslant10^5)$个点的无向无权图,多组询问,每次询问给你一些二元组$(x_i,y_i)$,求有多少个$u$于至少一个二 ...
- P5068 [Ynoi2015]我回来了
传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再 ...
- [题解] Luogu P5446 [THUPC2018]绿绿和串串
[题解] Luogu P5446 [THUPC2018]绿绿和串串 ·题目大意 定义一个翻转操作\(f(S_n)\),表示对于一个字符串\(S_n\), 有\(f(S)= \{S_1,S_2,..., ...
- 【题解】Luogu P5071 [Ynoi2015]此时此刻的光辉
众所周知lxl是个毒瘤,Ynoi道道都是神仙题,题面好评 原题传送门 一看这题没有修改操作就知道这是莫队题(我也只会莫队) 我博客里对莫队的简单介绍 一个数N可以分解成\(p_1^{c_1}p_2^{ ...
- 【题解】Luogu P5072 [Ynoi2015]盼君勿忘
众所周知lxl是个毒瘤,Ynoi道道都是神仙题,题面好评 原题传送门 一看这题没有修改操作就知道这是莫队题 我博客里对莫队的简单介绍 既然是莫队,我们就要考虑每多一个数或少一个数对答案的贡献是什么 假 ...
- luoguP5068 [Ynoi2015]我回来了
https://www.luogu.org/problemnew/show/P5068 ynoi 中的良心题啊 考虑用 bitset 来维护里一个点距离小于 $ y_i $ 的点,那么答案就是一堆 b ...
- 题解 Luogu P2499: [SDOI2012]象棋
关于这道题, 我们可以发现移动顺序不会改变答案, 具体来说, 我们有以下引理成立: 对于一个移动过程中的任意一个移动, 若其到达的位置上有一个棋子, 则该方案要么不能将所有棋子移动到最终位置, 要么可 ...
- 题解 luogu P1144 【最短路计数】
本蒟蒻也来发一次题解第一篇请见谅 这个题有几个要点 1.无向无权图,建图的时候别忘记建来回的有向边[因此WA掉1次 2.无权嘛,那么边长建成1就好了2333333 3.最短路采用迪杰斯特拉(别忘用堆优 ...
随机推荐
- Java Selenium - 浏览器操作
浏览器主要操作方法来自接口 org.openqa.selenium.WebDriver , 实现于org.openqa.selenium.remote.RemoteWebDriver这个类,然后不同浏 ...
- myloader原理介绍
myloader恢复主要流程 1.首先由myloader主线程完成建库建表,依次将备份目录下建库和建表文件执行应用到目标数据库实例中: 2.接着myloader主线程会生成多个工作线程,由这些 ...
- jenkins 关联 钉钉机器人
注意:Jenkins URL配置中需要在最后添加"/",要不然会导致拼接的Url出错,这里填写有问题会导致无法从钉钉中跳转到Jenkins任务
- centos7及服务器端安装python2.7.13, setuptools, pip
1. 安装python2.7.13 因为涉及到安装到服务器,所以可能不能直接在usr/bin及usr/local/bin下安装,所以本文详解安装在自定义目录下. 下载安装包: $ wget https ...
- Android提权漏洞CVE-2014-7920、CVE-2014-7921
- cocos2d-x C++ (iOS)集成第三方微信分享
1.新建项目并下载 ShareSDK 1.Cocos2d-x项目环境搭建,不会的童鞋自行面壁哈: 网页链接. 2.ShareSDK iOS版本的 Cocos2d-x 插件是在ShareSDK iOS版 ...
- ajax提交完表单数据依然跳转的解决办法
1. 既然ajax提交数据,就把表单里面submit按钮换掉,因为触发submit他就会跳转页面 提交的时候他会先触发ajax 再触发submit的提交 2.如果确定了表单没有submit,那么把提交 ...
- .NET 黑魔法 - asp.net core 配置文件的"对象存储"
来,全都是干货. 我们都知道在Framework版本的mvc项目中,配置数据是通过web.config里的appSettings节点配置,我们不得不写一些读取配置文件字符串的类,比如保存在静态的变量中 ...
- maven下载和安装
注意:安装Maven3之前需要安装jdk1.7以上版本,下面介绍的是最新版Maven官网下载并安装, 每个人使用的编辑器不同,在这里我就不介绍了,可以去网上查对应编辑器Maven配置方法. 第一步,官 ...
- python base64加密文本内容(2)
上面一篇简单进行了base64加密 但安全系数非常低,只需要用网上的在线base64解码就能破解 这里我们可以自己修改一下base64加密后的字符串,在解码的时候只需要先提前将修改的内容还原就可以了 ...