https://www.luogu.org/problemnew/show/P5068

ynoi 中的良心题啊

考虑用 bitset 来维护里一个点距离小于 $ y_i $ 的点,那么答案就是一堆 bitset 或起来后二进制位中 $ 1 $ 的个数

这样我们只要令 $ f[i][j] $ 表示距离 $ i $ 点距离小于 $ j $ 的点,便可以高效求出答案

考虑怎么求出所有的 $ f[i][j] $

先枚举起点 $ u $,因为边权为 $ 1 $,所以只需要做一次 bfs

对于 $ i $ 这个点,假设它到 $ u $ 的距离为 $ dis_i $,那么我们就将 $ f[u][dis_i] $ 的第 $ i $ 位设为 $ 1 $,最后从小到大把 $ f[u][j] $ 或上 $ f[u][j - 1] $ 即可

复杂度是 $ \frac{n^3}{64} + (\sum\limits_{i=1}^{q}a_i)*\frac{n}{64} $,可以通过此题

最后 % 一发 lxl

#include <bits/stdc++.h>
#define CIOS ios::sync_with_stdio(false);
#define rep(i, a, b) for(register int i = a; i <= b; i++)
#define per(i, a, b) for(register int i = a; i >= b; i--)
#define DEBUG(x) cerr << "DEBUG" << x << " >>> ";
using namespace std; typedef unsigned long long ull;
typedef long long ll; template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') fu = -1; c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
} template <typename T>
void print(T x) {
if (x < 0) putchar('-'), x = -x;
if (x < 10) putchar(x + 48);
else print(x / 10), putchar(x % 10 + 48);
} template <typename T>
void print(T x, char t) {
print(x); putchar(t);
} const int N = 1005, INF = 0x7f7f7f7f; queue <int> q;
bitset <N> f[N][N], Ans;
vector <int> adj[N];
int dis[N][N], n, m, Q, now; int main() {
memset(dis, 0x7f, sizeof(dis));
read(n); read(m); read(Q);
for(register int i = 1; i <= m; i++) {
int a, b; read(a); read(b);
adj[a].push_back(b);
adj[b].push_back(a);
}
for(register int i = 1; i <= n; i++) {
q.push(i); dis[i][i] = 0; now = i; f[i][0].set(i);
while(!q.empty()) {
int u = q.front(); q.pop();
for(register int j = 0; j < adj[u].size(); j++) {
int v = adj[u][j];
if(dis[i][v] == INF) {
dis[i][v] = dis[i][u] + 1;
q.push(v); f[i][dis[i][v]].set(v);
}
}
}
for(register int j = 1; j <= n; j++) f[i][j] |= f[i][j - 1];
}
while(Q--) {
int t; read(t); Ans.reset();
while(t--) {
int a, b; read(a); read(b);
if(b > n) b = n;
Ans |= f[a][b];
}
print(Ans.count(), '\n');
}
return 0;
}

luoguP5068 [Ynoi2015]我回来了的更多相关文章

  1. [Ynoi2015]我回来了

    题目大意: 给定一张无向无权图,每次给定若干个二元组\((x_i,y_i)\),定义点\(u\)满足条件,当且仅当存在\(i\),并满足\(dist(u,x_i)\leqslant y_i\)(\(d ...

  2. 【题解】Luogu P5068 [Ynoi2015]我回来了

    众所周知lxl是个毒瘤,Ynoi道道都是神仙题,这道题极其良心,题面好评 原题传送门 我们先珂以在\(O(n^2)\)的时间内bfs求出任意两点距离 我们考虑如何计算从一个点到所有点的最短路长度小于等 ...

  3. [洛谷P5068][Ynoi2015]我回来了

    题目大意:给你一张$n(n\leqslant10^3)$个点$m(m\leqslant10^5)$个点的无向无权图,多组询问,每次询问给你一些二元组$(x_i,y_i)$,求有多少个$u$于至少一个二 ...

  4. P5068 [Ynoi2015]我回来了

    传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再 ...

  5. Luogu P5068 [Ynoi2015]我回来了

    题目 Ynoi难得的水题. 首先我们可以\(O(n^2)\)地求出任意两点之间的距离. 然后我们可以\(O(n^3)\)地求出对于任意一个点\(u\),跟它距离\(\le d\)的点的集合. 然后对于 ...

  6. 「Ynoi2015」我回来了

    「Ynoi2015」我回来了 这东西已经不是 Ynoi 了,因为太水被嫌弃了. 如何提升自己的数据结构能力?从Ynoi做起 题目链接 其实这个题很小清新的辣,而且不卡常. 由于边权为 \(1\),所以 ...

  7. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  8. [分享] 很多人手机掉了,却不知道怎么找回来。LZ亲身经历讲述手机找回过程,申请加精!

    文章开头:(LZ文笔不好,以下全部是文字描述,懒得配图.因为有人说手机掉了,他们问我是怎么找回来的.所以想写这篇帖子.只不过前段时间忙,没时间.凑端午节给大家一些经验) 还是先谢谢被偷经历吧!5月22 ...

  9. 如何使用Retrofit获取服务器返回来的JSON字符串

    有关Retrofit的简单集成攻略,大家可以参考我此前的一篇文章有关更多API文档的查阅请大家到Retrofit官网查看. 在大家使用网络请求的时候,往往会出现一种情况:需要在拿到服务器返回来的JSO ...

随机推荐

  1. java 序列化时排除指定属性

    java 序列化对象如何排除指定属性呢? java 中序列化对象有多种方式:struts2 ,jackson,json-lib (1)使用struts2 json插件 依赖的jar包:struts2- ...

  2. FastJson bean序列化属性顺序问题

    fastjson序列化一个java bean,默认是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序,这个特性需要1.1.42以上版本.示例如下. import co ...

  3. spring学习---day01

    1,Spring Boot项目在启动的时,修改默认图标: 在src/main/resources目录下新建banner.txt文件,然后将自己的图案黏贴进去即可.ASCII图案可通过网站http:// ...

  4. go_Map

    go语言中map使用哈希表,必须可以比较相等 除了slice,map,function的内建类型都可以作为key Struct类型不包括上述字段,也可作为key map中的key是无序的 packag ...

  5. mac下git push避免每次都输入用户名和密码的配置

    参考链接:http://www.linuxdiyf.com/linux/18389.html 链接2:https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%8 ...

  6. jsp页面拨打电话和QQ聊天

    拨打电话: <a href="tel:手机号">拨打电话</a> 这种方式塞班.安卓与iphone都支持. 参考文章:https://blog.csdn.n ...

  7. jquey下eq()的使用注意事项

    写在开始的话: 今天在公司路经同事工位,发现在写jquery代码,刚好遇见一个bug,于是驻足看了一会,发现了jq遍历方法中eq()的使用的一个容易犯错的地方. 同事的代码大概意思是这样的: < ...

  8. php 共享内存学习(shmop函数)

    问题:希望可以在进程间共享变量,为共享数据提供快速访问 解决方案:除了可以使用APC模块,还可以用shmop或System V共享内存 //创建键 //将一个可访问的文件路径名转换为一个可供 shmo ...

  9. Red Hat 系列如何快速定制二进制内核 RPM 包?

    随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...

  10. Please ensure that adb is correctly located at 。。。。。。。。。。。。

    遇到问题描述: 运行Android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error ...