1. 程式人生 > 其它 >CodeForces - 28B pSort【並查集】

CodeForces - 28B pSort【並查集】

技術標籤:並查集

題目連結:https://codeforces.com/contest/28/problem/B

#include <iostream>
using namespace std;
static const int MAXN=100+10;
int p[MAXN];
int seq[MAXN],d[MAXN];
int n;
void init() { for(int i=1;i<=n;i++) p[i]=i; }
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
int main
() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&seq[i]); init(); for(int i=1;i<=n;i++) { scanf("%d",&d[i]); if(i-d[i]>=1) { int u=i; int v=i-d[i]; int pu=find(u),
pv=find(v); if(pu!=pv) p[pu]=pv; } if(i+d[i]<=n) { int u=i; int v=i+d[i]; int pu=find(u),pv=find(v); if(pu!=pv) p[pu]=pv; } } bool flag=true; for(int i=1;i<=n;i++) { int u=i,v=seq[
i]; int pu=find(u),pv=find(v); if(pu!=pv) flag=false; } puts(flag?"YES":"NO"); return 0; }