闲话被虎哥扬了,哼哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!
遂水篇博客 .
我是仙人掌
珂朵莉给你一个无向图,每次查询的时候给一堆二元组 ((x_i,y_i)) .
求图中有多少个点 (u) 与至少一个这次询问给出的二元组 ((x_i,y_i)) 满足 (\operatorname{dist}(u,x_i)\leq y_i),(\operatorname{dist}) 表示这两个点在图中的距离 .
如果不连通 (\mathrm{dist} = +\infty) .
(1\leq n\leq 1000),(1\leq m,q \leq 10^5),(\sum a\leq2.1\times 10^6) .
首先 (n) 遍 BFS 求出全源最短路 .
然后我们就可以算出从每个点 (i) 出发,最短路恰好为 (j) 的点的集合,前缀或一遍就可以得到不大于 (j) 的集合(用 std :: bitset
存一下).
询问的时候直接 bitset
暴力并一下即可,时间复杂度 (\displaystyle O\left(n^2+nm+\left(n^3+n\sum a\right)/w\right))
代码(2021/7/13):
using namespace std;
const int N=1234;
vector g[N];
bitset F[N][N];
int n,m,q,dis[N];
void addedge(int u,int v){g[u].push_back(v);}
void bfs(int x)
{
for (int i=1;i q; q.push(x); dis[x]=0;
while (!q.empty())
{
int u=q.front(),s=g[u].size(); q.pop();
for (int i=0;i ans;
for (int i=1,u,v;i
Original: https://www.cnblogs.com/CDOI-24374/p/16595699.html
Author: Jijidawang
Title: 我是仙人掌社论
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/710918/
转载文章受原作者版权保护。转载请注明原作者出处!