Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define NM 1005
- int n, t[NM], nr[NM], rez;
- int cc[NM], nod_cur, ff[NM];
- set<int> s;
- vector<int> v[NM];
- bitset<NM> viz;
- void dfs1(int nod)
- {
- viz[nod] = 1;
- cc[nod] = nod_cur;
- ff[nod_cur]++;
- for(auto it:v[nod])
- if(!viz[it])
- dfs1(it);
- }
- void dfs(int nod)
- {
- viz[nod] = 1;
- for(auto it:v[nod])
- if(!viz[it])
- {
- dfs(it);
- nr[nod]+=nr[it];
- }
- nr[nod]++;
- s.insert(ff[cc[nod]] - nr[nod]);
- }
- int main()
- {
- cin >> n;
- for(int i=1; i<=n; i++)
- {
- cin >> t[i];
- if(t[i])
- {
- v[i].push_back(t[i]);
- v[t[i]].push_back(i);
- }
- }
- for(int i=1; i<=n; i++)
- if(!viz[i])
- {
- nod_cur = i;
- cc[i] = i;
- dfs1(i);
- }
- for(int i=1; i<=n; i++)
- viz[i] = 0;
- for(int i=1; i<=n; i++)
- if(t[i] == 0)
- {
- s.clear();
- dfs(i);
- for(int j=0; j<=n; j++)
- if(s.find(j) == s.end())
- {
- rez^=j;
- break;
- }
- }
- if(rez!=0)
- cout << "YES";
- else cout << "NO";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement