> 文章列表 > 每日刷题37

每日刷题37

每日刷题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;}
}