Submission #1518459


Source Code Expand

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int grn(vector<vector<int>> &e, vector<int> &grundy, int now){
	if(0 <= grundy[now]) return grundy[now];
	vector<int> v;
	for(int next:e[now]) v.emplace_back(grn(e, grundy, next));
	sort(v.begin(), v.end());
	int ret = 0;
	for(int p:v){
		if(p < ret) continue;
		if(ret == p){
			ret++;
			continue;
		}
		break;
	}
	return grundy[now] = ret;
}

bool check(vector<vector<int>> &e, vector<int> &grundy, int i){
	int c = grundy[i];
	set<int> s;
	for(int next:e[i]){
		int t = grundy[next];
		if(t < c) s.insert(t);
		if(t == c) return false;
	}
	return s.size() == c;
}

int main(){
	int n;
	cin >> n;
	vector<int> f(n);
	vector<vector<int>> e(n);
	for(int i = 0; i < n; i++){
		int p;
		cin >> p;
		e[--p].emplace_back(i);
		f[i] = p;
	}
	vector<int> loop, used(n, -1);
	int loop_start = 0;
	{
		int puni = 0;
		while(used[puni] < 0){
			used[puni] = loop.size();
			loop.emplace_back(puni);
			puni = f[puni];
		}
		loop_start = used[puni];
	}
	int min_deg = n + 1, min_vert = 0;
	for(int i = loop_start; i < loop.size(); i++){
		int v = loop[i];
		int deg = e[v].size();
		if(deg < min_deg){
			min_deg = deg;
			min_vert = v;
		}
	}
	vector<int> grundy(n);
	for(int cand = 0; cand <= min_deg; cand++){
		for(int i = 0; i < n; i++){
			grundy[i] = i == min_vert ? cand : -1;
		}
		for(int i = 0; i < n; i++) if(i != min_vert){
			grn(e, grundy, i);
		}
		if(check(e, grundy, min_vert)){
			cout << "POSSIBLE" << endl;
			return 0;
		}
	}
	cout << "IMPOSSIBLE" << endl;
}

Submission Info

Submission Time
Task F - Namori Grundy
User jbyxm
Language C++14 (GCC 5.4.1)
Score 800
Code Size 1646 Byte
Status AC
Exec Time 218 ms
Memory 20596 KB

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 1 ms 256 KB
example1 AC 1 ms 256 KB
example2 AC 1 ms 256 KB
example3 AC 1 ms 256 KB
loop0 AC 128 ms 9600 KB
loop1 AC 143 ms 9600 KB
loop10 AC 100 ms 9600 KB
loop11 AC 128 ms 9600 KB
loop12 AC 128 ms 9600 KB
loop13 AC 99 ms 9600 KB
loop14 AC 143 ms 9600 KB
loop15 AC 129 ms 9600 KB
loop16 AC 102 ms 9600 KB
loop17 AC 128 ms 9600 KB
loop18 AC 113 ms 9600 KB
loop19 AC 101 ms 9600 KB
loop2 AC 99 ms 9600 KB
loop3 AC 113 ms 9600 KB
loop4 AC 113 ms 9600 KB
loop5 AC 143 ms 9600 KB
loop6 AC 99 ms 9600 KB
loop7 AC 100 ms 9600 KB
loop8 AC 85 ms 9600 KB
loop9 AC 128 ms 9600 KB
loopex0 AC 101 ms 9856 KB
loopex1 AC 98 ms 9600 KB
loopex10 AC 84 ms 9472 KB
loopex11 AC 218 ms 9600 KB
loopex12 AC 85 ms 9600 KB
loopex13 AC 99 ms 9600 KB
loopex14 AC 84 ms 9472 KB
loopex15 AC 85 ms 9600 KB
loopex16 AC 102 ms 9728 KB
loopex17 AC 100 ms 9600 KB
loopex18 AC 89 ms 9856 KB
loopex19 AC 84 ms 9600 KB
loopex2 AC 84 ms 9600 KB
loopex20 AC 85 ms 9472 KB
loopex21 AC 101 ms 9728 KB
loopex22 AC 84 ms 9728 KB
loopex23 AC 85 ms 9600 KB
loopex3 AC 84 ms 9600 KB
loopex4 AC 100 ms 9600 KB
loopex5 AC 102 ms 9856 KB
loopex6 AC 85 ms 9472 KB
loopex7 AC 86 ms 9600 KB
loopex8 AC 86 ms 9728 KB
loopex9 AC 101 ms 9728 KB
rand0 AC 27 ms 4736 KB
rand1 AC 39 ms 7040 KB
rand2 AC 10 ms 2560 KB
rand3 AC 80 ms 15104 KB
rand4 AC 105 ms 20596 KB
rand5 AC 45 ms 6784 KB
rand6 AC 19 ms 4224 KB
rand7 AC 5 ms 1408 KB
rand8 AC 67 ms 13948 KB
rand9 AC 4 ms 1152 KB
small0 AC 1 ms 256 KB
small1 AC 1 ms 256 KB
small2 AC 1 ms 256 KB
small3 AC 1 ms 256 KB
small4 AC 1 ms 256 KB
small5 AC 1 ms 256 KB
small6 AC 1 ms 256 KB
small7 AC 1 ms 256 KB
small8 AC 1 ms 256 KB
small9 AC 1 ms 256 KB