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. UGUI 事件穿透规则

    UGUI事件分为两大类:点击和拖拽. 点击包括 pointerdown, pointerup. 拖拽包括 begindrag, drag, enddrag. 点击事件无穿透:只会被最上层UI响应,不会 ...

  2. JS调用webservice的两种方式

    协议肯定是使用http协议,因为soap协议本身也是基于http协议.期中第二种方式:只有webservice3.5以后版本才可以成功 第一种方式:构造soap格式的body,注意加粗的黄色标识,比如 ...

  3. aria2自动更新BT Tracker服务器列表脚本

    vi /root/trackers-list-aria2.sh 内容如下: #!/bin/bash #/usr/sbin/service aria2 stop list=`wget -qO- http ...

  4. SQL优化的部分内容

    为什么要优化:      随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们         就需要做一个优化调整.   数据库优化这个课题较 ...

  5. Linux基石【第四篇】基本Linux命令

    Linux 系统上一切皆文件 命令: pwd  -- 查看当前目录  / 代表根目录 clear -- 清屏命令 cd(change directory) -- 切换目录 cd / -- 切换到根目录 ...

  6. 获取set()和push()方法向值栈放的数据

    ------------------siwuxie095 获取 set() 方法向值栈放的数据 1.具体步骤 (1)在 Action 中使用 set() 方法向值栈放数据 (2)在 JSP 页面中从值 ...

  7. centos7 ntp服务器配置

    一.ntp服务是什么 1. 定义 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 2. 发展 首次记载在Internet Enginee ...

  8. 二叉搜索树的后序遍历序列 (java)

    import java.util.*; public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if( ...

  9. innobackupex工作原理

    写篇文章凑个数,基本是翻译,建议看原文. http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/how_innobackupex ...

  10. Maven项目下java.lang.ClassNotFoundException常规解决办法

    网上很多要修改.class .project的比较麻烦有时候还不一定管用.下面的方法适合于项目用已经引用了jar,但是运行时却ClassNotFound,请用如下方法试试: 严重: Error con ...