Submission #1009206

#TimeUsernameProblemLanguageResultExecution timeMemory
1009206bornag특수한 그래프 (IZhO13_specialg)C++14
0 / 100
1039 ms1112 KiB
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5;

int n, m;
int graph[maxn];
int dis[maxn];

int bfs(int s, int e){
	for(int i = 0; i < n; i++)
		dis[i] = -1;
		
	queue<pair<int, int>> q;
	q.push({s, 0});
	
	while(!q.empty()){
		int node = q.front().first;
		int d = q.front().second;
		
		q.pop();
		
		if(dis[node] != -1) continue;
		dis[node] = d;
		
		if(graph[node] != -1 && dis[graph[node]] == -1) q.push({graph[node], d+1});
	}
	return dis[e];
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n;
	
	for(int i = 0; i < n; i++){
		cin >> graph[i]; graph[i]--;
	}
	
	cin >> m;
	
	while(m--){
		int typ; cin >> typ;
		
		if(typ == 1){
			int x; cin >> x;
			graph[x-1] = -1;
		} else {
			int a, b; cin >> a >> b;
			
			if(graph[a-1] == -1) {
				cout << -1 << '\n';
				continue;
			}
			cout << bfs(a-1, b-1) << '\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...