53692023-04-26 19:05:32kohumarkKülönböző katicákcpp17Hibás válasz 0/100600ms130792 KiB
#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<vector<int>> con;
set<int> act; set<int> visited;
bool van=false;

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);
	}
	if(!van){
		for(auto it=now.begin(); it!=now.end(); it++) act.insert(*it);
		van=true;
	}
	//for(auto it=now.begin(); it!=now.end(); it++) cout << *it << '\n';
	else 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));}
		if(act.size()>0) van=true;
		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(1){
		cout << "IGEN\n";
		for(int i=0; i<n; i++){
			cout << p[i] << ' ';
		}
	}
	else cout << "NEM";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1816 KiB
2Hibás válasz3ms2060 KiB
3Időlimit túllépés600ms13536 KiB
subtask20/10
4Hibás válasz108ms18748 KiB
5Hibás válasz120ms20940 KiB
6Hibás válasz134ms22428 KiB
7Hibás válasz145ms24392 KiB
subtask30/15
8Futási hiba236ms130792 KiB
9Futási hiba237ms130548 KiB
10Futási hiba240ms130316 KiB
11Futási hiba230ms130152 KiB
12Futási hiba245ms129916 KiB
13Futási hiba232ms129872 KiB
14Hibás válasz143ms51704 KiB
subtask40/35
15Hibás válasz4ms4544 KiB
16Hibás válasz4ms4640 KiB
17Hibás válasz4ms4492 KiB
18Hibás válasz4ms4748 KiB
19Hibás válasz4ms4892 KiB
20Hibás válasz3ms4780 KiB
21Hibás válasz4ms4932 KiB
22Hibás válasz4ms5040 KiB
subtask50/40
23Hibás válasz134ms23968 KiB
24Időlimit túllépés552ms16404 KiB
25Hibás válasz317ms27692 KiB
26Hibás válasz144ms24444 KiB
27Hibás válasz381ms26108 KiB
28Időlimit túllépés555ms16296 KiB
29Hibás válasz126ms25532 KiB
30Hibás válasz142ms25380 KiB
31Időlimit túllépés577ms17904 KiB
32Időlimit túllépés518ms16776 KiB
33Időlimit túllépés569ms15564 KiB