Submission #1471649
Source Code Expand
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<b;i++) #define rrep(i,a,b) for(int i=a;i>=b;i--) #define fore(i,a) for(auto &i:a) #pragma GCC optimize ("-O3") using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); } //--------------------------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------------------------- ∧_∧ ∧_∧ (´<_` ) Welcome to My Coding Space! ( ´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ _/ .| .|____ \/____/ (u ⊃ ---------------------------------------------------------------------------------------------------*/ int N; vector<int> E[201010]; int P[201010]; int A[201010]; //--------------------------------------------------------------------------------------------------- void pre() { // 葉を刈る queue<int> que; rep(i, 1, N + 1) if (E[i].size() == 0) que.push(i); while (!que.empty()) { int cu = que.front(); que.pop(); if (0 <= A[cu]) continue; set<int> s; int ng = 0; fore(to, E[cu]) { if (A[to] < 0) ng = 1; s.insert(A[to]); } if (ng) continue; int g = 0; while (s.count(g)) g++; A[cu] = g; que.push(P[cu]); } } //--------------------------------------------------------------------------------------------------- bool check(int i, int x) { int pre = x; int cu = P[i]; while (cu != i) { set<int> s; s.insert(pre); fore(to, E[cu]) s.insert(A[to]); int g = 0; while (s.count(g)) g++; pre = g; cu = P[cu]; } set<int> s; s.insert(pre); fore(to, E[i]) s.insert(A[to]); int g = 0; while (s.count(g)) g++; return g == x; } //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; rep(i, 1, N + 1) { int p; cin >> p; E[p].push_back(i); P[i] = p; } rep(i, 1, N + 1) A[i] = -1; pre(); int fixid = 0; rep(i, 1, N + 1) if (A[i] < 0) fixid = i; set<int> s; fore(to, E[fixid]) s.insert(A[to]); int fir = 0; while (s.count(fir)) fir++; int sec = fir + 1; while (s.count(sec)) sec++; string ans = "IMPOSSIBLE"; if (check(fixid, fir)) ans = "POSSIBLE"; else if (check(fixid, sec)) ans = "POSSIBLE"; cout << ans << endl; }
Submission Info
Submission Time | |
---|---|
Task | F - Namori Grundy |
User | hamayanhamayan |
Language | C++14 (GCC 5.4.1) |
Score | 800 |
Code Size | 2827 Byte |
Status | AC |
Exec Time | 68 ms |
Memory | 11904 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 800 / 800 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | example0, example1, example2, example3 |
All | example0, example1, example2, example3, loop0, loop1, loop10, loop11, loop12, loop13, loop14, loop15, loop16, loop17, loop18, loop19, loop2, loop3, loop4, loop5, loop6, loop7, loop8, loop9, loopex0, loopex1, loopex10, loopex11, loopex12, loopex13, loopex14, loopex15, loopex16, loopex17, loopex18, loopex19, loopex2, loopex20, loopex21, loopex22, loopex23, loopex3, loopex4, loopex5, loopex6, loopex7, loopex8, loopex9, rand0, rand1, rand2, rand3, rand4, rand5, rand6, rand7, rand8, rand9, small0, small1, small2, small3, small4, small5, small6, small7, small8, small9 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
example0 | AC | 3 ms | 4992 KB |
example1 | AC | 3 ms | 4992 KB |
example2 | AC | 3 ms | 4992 KB |
example3 | AC | 3 ms | 4992 KB |
loop0 | AC | 62 ms | 9728 KB |
loop1 | AC | 62 ms | 9728 KB |
loop10 | AC | 62 ms | 9728 KB |
loop11 | AC | 62 ms | 9728 KB |
loop12 | AC | 62 ms | 9728 KB |
loop13 | AC | 62 ms | 9728 KB |
loop14 | AC | 62 ms | 9728 KB |
loop15 | AC | 62 ms | 9728 KB |
loop16 | AC | 62 ms | 9728 KB |
loop17 | AC | 62 ms | 9728 KB |
loop18 | AC | 62 ms | 9728 KB |
loop19 | AC | 62 ms | 9728 KB |
loop2 | AC | 62 ms | 9728 KB |
loop3 | AC | 63 ms | 9728 KB |
loop4 | AC | 63 ms | 9728 KB |
loop5 | AC | 62 ms | 9728 KB |
loop6 | AC | 63 ms | 9728 KB |
loop7 | AC | 62 ms | 9728 KB |
loop8 | AC | 61 ms | 9728 KB |
loop9 | AC | 62 ms | 9728 KB |
loopex0 | AC | 63 ms | 9856 KB |
loopex1 | AC | 62 ms | 9728 KB |
loopex10 | AC | 62 ms | 9728 KB |
loopex11 | AC | 62 ms | 9728 KB |
loopex12 | AC | 62 ms | 9728 KB |
loopex13 | AC | 62 ms | 9728 KB |
loopex14 | AC | 68 ms | 9728 KB |
loopex15 | AC | 63 ms | 9728 KB |
loopex16 | AC | 63 ms | 9856 KB |
loopex17 | AC | 62 ms | 9728 KB |
loopex18 | AC | 66 ms | 9856 KB |
loopex19 | AC | 62 ms | 9728 KB |
loopex2 | AC | 63 ms | 9728 KB |
loopex20 | AC | 62 ms | 9728 KB |
loopex21 | AC | 63 ms | 9728 KB |
loopex22 | AC | 63 ms | 9728 KB |
loopex23 | AC | 62 ms | 9728 KB |
loopex3 | AC | 62 ms | 9728 KB |
loopex4 | AC | 63 ms | 9728 KB |
loopex5 | AC | 64 ms | 9856 KB |
loopex6 | AC | 62 ms | 9728 KB |
loopex7 | AC | 63 ms | 9728 KB |
loopex8 | AC | 63 ms | 9728 KB |
loopex9 | AC | 63 ms | 9856 KB |
rand0 | AC | 18 ms | 6400 KB |
rand1 | AC | 26 ms | 7168 KB |
rand2 | AC | 9 ms | 5760 KB |
rand3 | AC | 50 ms | 9344 KB |
rand4 | AC | 60 ms | 11904 KB |
rand5 | AC | 30 ms | 7424 KB |
rand6 | AC | 13 ms | 6144 KB |
rand7 | AC | 6 ms | 5248 KB |
rand8 | AC | 43 ms | 8704 KB |
rand9 | AC | 5 ms | 5248 KB |
small0 | AC | 3 ms | 4992 KB |
small1 | AC | 3 ms | 4992 KB |
small2 | AC | 3 ms | 4992 KB |
small3 | AC | 3 ms | 4992 KB |
small4 | AC | 3 ms | 4992 KB |
small5 | AC | 3 ms | 4992 KB |
small6 | AC | 3 ms | 4992 KB |
small7 | AC | 3 ms | 4992 KB |
small8 | AC | 3 ms | 4992 KB |
small9 | AC | 3 ms | 4992 KB |