每日刷题37

资源限制
内存限制: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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_47988292/article/details/130009320