Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- const int MN = 1000 * 100 + 10;
- vector <int> g[MN];
- int color[MN], k = 0;
- void dfs(int v) {
- color[v] = k;
- for(int i = 0; i< g[v].size(); i ++) {
- int to = g[v][i];
- if (!color[to])
- dfs(to);
- }
- }
- int main () {
- //freopen ("input.txt","r",stdin);
- //freopen("output.txt", "w", stdout);
- int n, m;
- cin >> n >> m;
- for(int i = 1; i <= n; i ++) {
- int from;
- cin >> from;
- g[from].push_back(i);
- }
- g[1].push_back(2);
- g[2].push_back(1);
- for(int i = 1; i <= n; i ++) {
- if (!color[i]) {
- k ++;
- dfs(i);
- }
- }
- for(int i = 0; i < m; i ++) {
- int a, b;
- cin >> a >> b;
- if (color[a] == color[b])
- printf("Yes\n");
- else printf("No\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment