Submission #1883842


Source Code Expand

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;

inline int getint()
{
	static char c;
	while ((c = getchar()) < '0' || c > '9');

	int res = c - '0';
	while ((c = getchar()) >= '0' && c <= '9')
		res = res * 10 + c - '0';
	return res;
}

const int MaxN = 200000;

int n;
int fa[MaxN + 1];

vector<int> adj[MaxN + 1];

int cir_l = 0;
int cir[MaxN + 1];

bool vis[MaxN + 1];

int f[MaxN + 1];

int li_n;
int li[MaxN + 1];

void dfs(const int &u)
{
	for (int v : adj[u])
		if (!vis[v])
			dfs(v);

	li_n = 0;
	li[li_n++] = -1;
	li[li_n++] = MaxN << 8;
	for (int v : adj[u])
		if (!vis[v])
			li[li_n++] = f[v];

	sort(li, li + li_n);
	li_n = unique(li, li + li_n) - li;
	for (int i = 0; i < li_n; ++i)
		if (li[i + 1] != li[i] + 1)
		{
			f[u] = li[i] + 1;
			break;
		}
}

inline bool check()
{
	for (int i = 1; i < cir_l; ++i)
	{
		int u = cir[i];
		int v = cir[i - 1];
		if (f[u] != f[v])
			return true;
	}

	return ~cir_l & 1;
}

int main()
{
	cin >> n;
	for (int v = 1; v <= n; ++v)
	{
		fa[v] = getint();
		adj[fa[v]].push_back(v);
	}

	int sv = 1;
	for (int i = 0; i < n; ++i)
		sv = fa[sv];

	while (!vis[sv])
	{
		cir[cir_l++] = sv;
		vis[sv] = true;
		sv = fa[sv];
	}

	for (int i = 0; i < cir_l; ++i)
		dfs(cir[i]);

	puts(check() ? "POSSIBLE" : "IMPOSSIBLE");

	return 0;
}

Submission Info

Submission Time
Task F - Namori Grundy
User InvUsr
Language C++14 (GCC 5.4.1)
Score 800
Code Size 1450 Byte
Status AC
Exec Time 43 ms
Memory 12672 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 4
AC × 68
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 5504 KiB
example1 AC 3 ms 5504 KiB
example2 AC 3 ms 5504 KiB
example3 AC 3 ms 5504 KiB
loop0 AC 35 ms 9984 KiB
loop1 AC 36 ms 9984 KiB
loop10 AC 36 ms 9984 KiB
loop11 AC 36 ms 9984 KiB
loop12 AC 36 ms 9984 KiB
loop13 AC 36 ms 9984 KiB
loop14 AC 36 ms 9984 KiB
loop15 AC 36 ms 9984 KiB
loop16 AC 35 ms 9984 KiB
loop17 AC 36 ms 9984 KiB
loop18 AC 35 ms 9984 KiB
loop19 AC 35 ms 9984 KiB
loop2 AC 36 ms 9984 KiB
loop3 AC 36 ms 9984 KiB
loop4 AC 36 ms 9984 KiB
loop5 AC 36 ms 9984 KiB
loop6 AC 36 ms 9984 KiB
loop7 AC 36 ms 9984 KiB
loop8 AC 35 ms 9984 KiB
loop9 AC 36 ms 9984 KiB
loopex0 AC 36 ms 10112 KiB
loopex1 AC 35 ms 9984 KiB
loopex10 AC 36 ms 9984 KiB
loopex11 AC 35 ms 9984 KiB
loopex12 AC 35 ms 9984 KiB
loopex13 AC 36 ms 9984 KiB
loopex14 AC 36 ms 9984 KiB
loopex15 AC 36 ms 9984 KiB
loopex16 AC 36 ms 10112 KiB
loopex17 AC 36 ms 9984 KiB
loopex18 AC 37 ms 10112 KiB
loopex19 AC 36 ms 9984 KiB
loopex2 AC 36 ms 9984 KiB
loopex20 AC 35 ms 9984 KiB
loopex21 AC 36 ms 9984 KiB
loopex22 AC 36 ms 9984 KiB
loopex23 AC 36 ms 9984 KiB
loopex3 AC 36 ms 9984 KiB
loopex4 AC 37 ms 9984 KiB
loopex5 AC 37 ms 10112 KiB
loopex6 AC 36 ms 9984 KiB
loopex7 AC 36 ms 9984 KiB
loopex8 AC 36 ms 9984 KiB
loopex9 AC 36 ms 10112 KiB
rand0 AC 12 ms 6912 KiB
rand1 AC 17 ms 7552 KiB
rand2 AC 6 ms 6272 KiB
rand3 AC 33 ms 9856 KiB
rand4 AC 43 ms 12672 KiB
rand5 AC 20 ms 7936 KiB
rand6 AC 9 ms 6784 KiB
rand7 AC 4 ms 5760 KiB
rand8 AC 27 ms 9344 KiB
rand9 AC 4 ms 5760 KiB
small0 AC 3 ms 5504 KiB
small1 AC 3 ms 5504 KiB
small2 AC 3 ms 5504 KiB
small3 AC 3 ms 5504 KiB
small4 AC 3 ms 5504 KiB
small5 AC 3 ms 5504 KiB
small6 AC 3 ms 5504 KiB
small7 AC 3 ms 5504 KiB
small8 AC 3 ms 5504 KiB
small9 AC 3 ms 5504 KiB