A12845 | Graph Traveler
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
Gildong is experimenting with an interesting machine Graph Traveler. In Graph Traveler, there is a directed graph consisting of $n$ vertices numbered from $1$ to $n$ . The $i$ -th vertex has $m_i$ outgoing edges that are labeled as $e_i[0]$ , $e_i[1]$ , $\ldots$ , $e_i[m_i-1]$ , each representing the destination vertex of the edge. The graph can have multiple edges and self-loops. The $i$ -th vertex also has an integer $k_i$ written on itself.
A travel on this graph works as follows.
1. Gildong chooses a vertex to start from, and an integer to start with. Set the variable $c$ to this integer.
2. After arriving at the vertex $i$ , or when Gildong begins the travel at some vertex $i$ , add $k_i$ to $c$ .
3. The next vertex is $e_i[x]$ where $x$ is an integer $0 \le x \le m_i-1$ satisfying $x \equiv c \pmod {m_i}$ . Go to the next vertex and go back to step 2.
It's obvious that a travel never ends, since the 2nd and the 3rd step will be repeated endlessly.
For example, assume that Gildong starts at vertex $1$ with $c = 5$ , and $m_1 = 2$ , $e_1[0] = 1$ , $e_1[1] = 2$ , $k_1 = -3$ . Right after he starts at vertex $1$ , $c$ becomes $2$ . Since the only integer $x$ ( $0 \le x \le 1$ ) where $x \equiv c \pmod {m_i}$ is $0$ , Gildong goes to vertex $e_1[0] = 1$ . After arriving at vertex $1$ again, $c$ becomes $-1$ . The only integer $x$ satisfying the conditions is $1$ , so he goes to vertex $e_1[1] = 2$ , and so on.
Since Gildong is quite inquisitive, he's going to ask you $q$ queries. He wants to know how many distinct vertices will be visited infinitely many times, if he starts the travel from a certain vertex with a certain value of $c$ . Note that you should not count the vertices that will be visited only finite times.
A travel on this graph works as follows.
1. Gildong chooses a vertex to start from, and an integer to start with. Set the variable $c$ to this integer.
2. After arriving at the vertex $i$ , or when Gildong begins the travel at some vertex $i$ , add $k_i$ to $c$ .
3. The next vertex is $e_i[x]$ where $x$ is an integer $0 \le x \le m_i-1$ satisfying $x \equiv c \pmod {m_i}$ . Go to the next vertex and go back to step 2.
It's obvious that a travel never ends, since the 2nd and the 3rd step will be repeated endlessly.
For example, assume that Gildong starts at vertex $1$ with $c = 5$ , and $m_1 = 2$ , $e_1[0] = 1$ , $e_1[1] = 2$ , $k_1 = -3$ . Right after he starts at vertex $1$ , $c$ becomes $2$ . Since the only integer $x$ ( $0 \le x \le 1$ ) where $x \equiv c \pmod {m_i}$ is $0$ , Gildong goes to vertex $e_1[0] = 1$ . After arriving at vertex $1$ again, $c$ becomes $-1$ . The only integer $x$ satisfying the conditions is $1$ , so he goes to vertex $e_1[1] = 2$ , and so on.
Since Gildong is quite inquisitive, he's going to ask you $q$ queries. He wants to know how many distinct vertices will be visited infinitely many times, if he starts the travel from a certain vertex with a certain value of $c$ . Note that you should not count the vertices that will be visited only finite times.
输入格式
The first line of the input contains an integer $n$ ( $1 \le n \le 1000$ ), the number of vertices in the graph.
The second line contains $n$ integers. The $i$ -th integer is $k_i$ ( $-10^9 \le k_i \le 10^9$ ), the integer written on the $i$ -th vertex.
Next $2 \cdot n$ lines describe the edges of each vertex. The $(2 \cdot i + 1)$ -st line contains an integer $m_i$ ( $1 \le m_i \le 10$ ), the number of outgoing edges of the $i$ -th vertex. The $(2 \cdot i + 2)$ -nd line contains $m_i$ integers $e_i[0]$ , $e_i[1]$ , $\ldots$ , $e_i[m_i-1]$ , each having an integer value between $1$ and $n$ , inclusive.
Next line contains an integer $q$ ( $1 \le q \le 10^5$ ), the number of queries Gildong wants to ask.
Next $q$ lines contains two integers $x$ and $y$ ( $1 \le x \le n$ , $-10^9 \le y \le 10^9$ ) each, which mean that the start vertex is $x$ and the starting value of $c$ is $y$ .
The second line contains $n$ integers. The $i$ -th integer is $k_i$ ( $-10^9 \le k_i \le 10^9$ ), the integer written on the $i$ -th vertex.
Next $2 \cdot n$ lines describe the edges of each vertex. The $(2 \cdot i + 1)$ -st line contains an integer $m_i$ ( $1 \le m_i \le 10$ ), the number of outgoing edges of the $i$ -th vertex. The $(2 \cdot i + 2)$ -nd line contains $m_i$ integers $e_i[0]$ , $e_i[1]$ , $\ldots$ , $e_i[m_i-1]$ , each having an integer value between $1$ and $n$ , inclusive.
Next line contains an integer $q$ ( $1 \le q \le 10^5$ ), the number of queries Gildong wants to ask.
Next $q$ lines contains two integers $x$ and $y$ ( $1 \le x \le n$ , $-10^9 \le y \le 10^9$ ) each, which mean that the start vertex is $x$ and the starting value of $c$ is $y$ .
输出格式
For each query, print the number of distinct vertices that will be visited infinitely many times, if Gildong starts at vertex $x$ with starting integer $y$ .
输入输出样例
输入 #1
4 0 0 0 0 2 2 3 1 2 3 2 4 1 4 3 1 2 1 6 1 0 2 0 3 -1 4 -2 1 1 1 5
输出 #1
1 1 2 1 3 2
输入 #2
4 4 -5 -3 -1 2 2 3 1 2 3 2 4 1 4 3 1 2 1 6 1 0 2 0 3 -1 4 -2 1 1 1 5
输出 #2
1 1 1 3 1 1
The first example can be shown like the following image:
Three integers are marked on $i$ -th vertex: $i$ , $k_i$ , and $m_i$ respectively. The outgoing edges are labeled with an integer representing the edge number of $i$ -th vertex.
The travel for each query works as follows. It is described as a sequence of phrases, each in the format "vertex ( $c$ after $k_i$ added)".
- $1(0) \to 2(0) \to 2(0) \to \ldots$
- $2(0) \to 2(0) \to \ldots$
- $3(-1) \to 1(-1) \to 3(-1) \to \ldots$
- $4(-2) \to 2(-2) \to 2(-2) \to \ldots$
- $1(1) \to 3(1) \to 4(1) \to 1(1) \to \ldots$
- $1(5) \to 3(5) \to 1(5) \to \ldots$
The second example is same as the first example, except that the vertices have non-zero values. Therefore the answers to the queries also differ from the first example.
The queries for the second example works as follows:
- $1(4) \to 2(-1) \to 2(-6) \to \ldots$
- $2(-5) \to 2(-10) \to \ldots$
- $3(-4) \to 1(0) \to 2(-5) \to 2(-10) \to \ldots$
- $4(-3) \to 1(1) \to 3(-2) \to 4(-3) \to \ldots$
- $1(5) \to 3(2) \to 1(6) \to 2(1) \to 2(-4) \to \ldots$
- $1(9) \to 3(6) \to 2(1) \to 2(-4) \to \ldots$
Three integers are marked on $i$ -th vertex: $i$ , $k_i$ , and $m_i$ respectively. The outgoing edges are labeled with an integer representing the edge number of $i$ -th vertex.
The travel for each query works as follows. It is described as a sequence of phrases, each in the format "vertex ( $c$ after $k_i$ added)".
- $1(0) \to 2(0) \to 2(0) \to \ldots$
- $2(0) \to 2(0) \to \ldots$
- $3(-1) \to 1(-1) \to 3(-1) \to \ldots$
- $4(-2) \to 2(-2) \to 2(-2) \to \ldots$
- $1(1) \to 3(1) \to 4(1) \to 1(1) \to \ldots$
- $1(5) \to 3(5) \to 1(5) \to \ldots$
The second example is same as the first example, except that the vertices have non-zero values. Therefore the answers to the queries also differ from the first example.
The queries for the second example works as follows:
- $1(4) \to 2(-1) \to 2(-6) \to \ldots$
- $2(-5) \to 2(-10) \to \ldots$
- $3(-4) \to 1(0) \to 2(-5) \to 2(-10) \to \ldots$
- $4(-3) \to 1(1) \to 3(-2) \to 4(-3) \to \ldots$
- $1(5) \to 3(2) \to 1(6) \to 2(1) \to 2(-4) \to \ldots$
- $1(9) \to 3(6) \to 2(1) \to 2(-4) \to \ldots$
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted