问题 H: Jump Conveyor
#include <bits/stdc++.h>
using namespace std;
int a[1000010];
int p[1000010];
int find(int x){
if(x != p[x])
p[x] = find(p[x]);
return p[x];
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
memset(p,0, sizeof(p));
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
p[i] = i;
}
for(int i=1;i<=n;i++){
int cnt = i + a[i];
if(cnt > n)
cnt = n + 1;
else if(cnt < 1){
cnt = 0;
}
p[find(i)] = find(cnt);
// cout<<find(i)<<" "<<find(cnt)<<endl;
}
int sum = 0;
for(int i=1;i<=n;i++){
int k = find(i);
if(k)
sum++;
// cout<<find(i)<<endl;
}
cout<<sum<<endl;
}
return 0;
}