CodeForces - 28B pSort【並查集】
阿新 • • 發佈:2021-01-24
技術標籤:並查集
題目連結: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;
}