资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
某城市有n个小镇,编号是1~n。由于贫穷和缺乏城市规划的人才,每个小镇有且仅有一段单向的公路通往别的小镇。有一天,一辆小轿车误入了这座城市,它只能沿着公路走,它走啊走,却再也走不出这座城市了……
问如果这辆车从某个小镇出发,走了若干段公路,会到达哪个小镇。每组数据有m个询问。
输入格式
第一行两个数n、m:表示小镇数和询问数;
接下来一行n个数,第i个数Ai:表示从小镇i出发的公路会通向小镇Ai;
接下来m行,第i行有两个数Bi和Ci:询问小轿车从小镇Bi出发,走过Ci段路后会达到哪个小镇。
输出格式
一行m个数回答每个询问。
样例输入
3 3
2 1 3
1 1
2 2
3 3
样例输出
2 2 3
数据规模和约定
对于60%的数据:1<=n、m<=1000,1<=Ai、Bi<=n,0<=Ci<=1000;
对于100%的数据:1<=n、m<=100000,1<=Ai、Bi<=n,0<=Ci<=100000。
解答:
#include<iostream>
using namespace std;
typedef long long ll;
const ll M = 10000;
ll dp[M][M],dp1[M];
ll n,m;
ll search1(ll x,ll y){
if(y==0){
return x;
}
for(int i =1;i<=n;i++){
if(i==x){
return search1(dp1[i],--y);
}
}
return 0;
}
int main(){
cin >> n >> m;
for(int i =1;i<=n;i++){
cin >> dp1[i];
}
int x = m;
while(x--){
ll y,z;
cin >> y >> z;
cout<<search1(y,z)<<endl;
}
}