链接:
https://www.nowcoder.com/acm/contest/82/E
来源:牛客网
来源:牛客网
题目描述
有一个n个点的无向图,有m次查询,每次查询给出一些(xi,yi)
令dist(x,y)表示x和y点在图中最短距离,dist(x,x)=0,如果x,y不连通则dist(x,y) = inf
每次查询图中有多少个点v与至少一个这次询问给出的(xi,yi)满足dist(v,xi)<=yi
输入描述:
第一行三个数表示n,m,q
之后m行每行两个数x,y表示有一条x与y之间的边,边权为1
之后q次询问,每个询问先给你一个数a
之后一行2a个数,第2i-1个数x
i和第2i个数y
i表示一个二元组(x
i,y
i)
输出描述:
输出q行,每行一个数表示这次询问的答案
示例1
输入
5 6 6 2 3 1 3 2 5 1 3 3 2 2 5 1 3 1 1 1 1 1 1 4 1 5 2 1 1 4 2 1 0 5 1
输出
3 2 4 3 4 3
备注:
对于100%的数据,n <= 1000 , m <= 100000 , q <= 100000 a的和<= 2100000
题解:定义bitset<N>a[v][dis]为距离点v,距离小于dis的1-N点分布情况。然后由于边权都为1,对于每个点O(N)BFS处理出其到其他点的最短距离。然后O(N^3 / W)处理下。