Description
n个城市编号1~n,前n-1个城市分别有一个通道,每个通道长ai,即从第i个城市可以到达第i+ai个城市,现给出这n-1个通道的长度,并给出一个城市的编号t,问是否能从1城市到t城市
Input
第一行两个整数n和t表示城市总数以及目标城市编号,第二行n-1个整数表示n-1个通道的长度,保证i+ai不会超过n
Output
如果可以从1城市到t城市则输出YES,否则输出NO
Sample Input
8 4
1 2 1 2 1 2 1
Sample Output
YES
Solution
水题,能到i就能到i+ai,开一个标记数组标记每个城市是否可达即可
Code
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 33333
int n,t,sum,a[maxn],flag[maxn];
int main()
{
while(~scanf("%d%d",&n,&t))
{
memset(flag,0,sizeof(flag));
flag[1]=1;
for(int i=1;i<n;i++)
scanf("%d",&a[i]);
for(int i=1;i<n;i++)
if(flag[i])
flag[i+a[i]]=1;
if(flag[t])printf("YES\n");
else printf("NO\n");
}
return 0;
}