53702023-04-26 19:07:40kohumarkKülönböző katicákcpp17Időlimit túllépés 0/100600ms130744 KiB
#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<vector<int>> con;
set<int> act; set<int> visited;

void actual(int i, int p[], int l){
	visited.insert(i);
	set<int> now;
	for(auto it=con[i].begin(); it!=con[i].end(); it++){
		if(p[*it]!=-1){
			int a=-l;
			while(a!=l){
				if(p[*it]+a>=0) now.insert(p[*it]+a);
				a+=2;
			}
		}
		if(!visited.count(*it)) actual(*it, p, l+1);
	}
	//for(auto it=now.begin(); it!=now.end(); it++) cout << *it << '\n';
	for(auto it=act.begin(); it!=act.end(); it++) if(!now.count(*it)){act.erase(*it); it=act.begin(); if(act.size()==0) break;}
}

int solve(int i, int p[]){
	//cout << '\n' << i << '\n';
	visited.insert(i);
	for(auto it=con[i].begin(); it!=con[i].end(); it++){
		if(p[*it]!=-1){act.insert(p[*it]+1); act.insert(abs(p[*it]-1));}
		actual(*it, p, 2);
	}
	if(act.size()==0) return -1;
	int x=*(act.begin()); act.clear(); visited.clear();
	return x;
}

int main(){
	bool ok=true;
	int n; cin >> n;
	int p[n]; //f[n];
	con.assign(n, vector<int>());
	for(int i=0; i<n; i++){
		int x; cin >> x;
		if(x!=0){con[i].push_back(x-1); con[x-1].push_back(i);}
	}
	for(int i=0; i<n; i++) cin >> p[i];
	for(int i=0; i<n; i++){
		if(p[i]==-1) p[i]=solve(i, p);
		if(p[i]==-1){ok=false; break;}
	}
	if(ok){
		cout << "IGEN\n";
		for(int i=0; i<n; i++){
			cout << p[i] << ' ';
		}
	}
	else cout << "NEM";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1812 KiB
2Elfogadva3ms2060 KiB
3Időlimit túllépés600ms13568 KiB
subtask20/10
4Hibás válasz100ms18848 KiB
5Hibás válasz112ms20700 KiB
6Hibás válasz122ms22212 KiB
7Hibás válasz140ms24372 KiB
subtask30/15
8Futási hiba237ms130744 KiB
9Futási hiba230ms130504 KiB
10Futási hiba240ms130272 KiB
11Futási hiba234ms130192 KiB
12Futási hiba238ms129996 KiB
13Futási hiba232ms129780 KiB
14Hibás válasz128ms51532 KiB
subtask40/35
15Hibás válasz4ms4356 KiB
16Elfogadva4ms4508 KiB
17Elfogadva3ms4344 KiB
18Hibás válasz3ms4472 KiB
19Hibás válasz4ms4784 KiB
20Hibás válasz3ms4552 KiB
21Hibás válasz4ms4704 KiB
22Hibás válasz4ms4720 KiB
subtask50/40
23Hibás válasz123ms23704 KiB
24Időlimit túllépés558ms16512 KiB
25Elfogadva305ms27500 KiB
26Hibás válasz134ms24400 KiB
27Hibás válasz370ms26116 KiB
28Időlimit túllépés560ms16456 KiB
29Hibás válasz112ms25644 KiB
30Hibás válasz133ms25192 KiB
31Időlimit túllépés565ms18160 KiB
32Időlimit túllépés550ms17680 KiB
33Időlimit túllépés577ms15588 KiB