101802024-03-29 10:39:00111Különböző katicákcpp17Hibás válasz 0/10064ms52456 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	vector<vector<int>>g(N+1);
	vector<int>p(N+1);
	for(int i=1;i<=N;i++){
		cin>>p[i];
		if(i==1){
			continue;
		}
		g[p[i]].push_back(i);
		g[i].push_back(p[i]);
	}
	vector<int>v(N+1);
	for(int i=1;i<=N;i++){
		cin>>v[i];
	}
	vector<pair<int,int>>w(N+1);
	auto dfs=[&](auto self,int i)->pair<int,int>{
		pair<int,int>a={v[i],v[i]};
		for(int j:g[i]){
			pair<int,int>b=j==p[i]?v[j]==-1?pair<int,int>{-1,-1}:pair<int,int>{abs(v[j]-1),v[j]+1}:self(self,j);
			if(b.first==-1&&b.second==-1){
				continue;
			}
			if(a.first==-1&&a.second==-1){
				a=b;
				continue;
			}
			if(a.first%2!=b.first%2||b.first>a.second||b.second<a.first){
				cout<<"NEM"<<'\n';
				exit(0);
			}
			a.first=max(a.first,b.first);
			a.second=min(a.second,b.second);
		}
		w[i]=a;
		if(a.first!=-1&&a.second!=-1){
			a.first=a.first==0?a.first+1:a.first-1;
			a.second++;
		}
		return a;
	};
	dfs(dfs,1);
	auto dfs2=[&](auto self,int i)->void{
		for(int j:g[i]){
			if(j==p[i]){
				continue;
			}
			if(v[j]==-1){
				v[j]=v[i]+1;
			}
			else{
				if(w[j].first<=v[i]+1&&v[i]+1<=w[j].second){
					v[j]=v[i]+1;
				}
				else{
					v[j]=v[i]-1;
				}
			}
			self(self,j);
		}
	};
	dfs2(dfs2,1);
	for(int i=1;i<=N;i++){
		for(int j:g[i])if(abs(v[i]-v[j])!=1){
			cout<<i<<" "<<v[i]<<endl;
			cout<<j<<" "<<v[j]<<endl;
			exit(1);
		}
	}
	cout<<"IGEN"<<'\n';
	for(int i=1;i<=N;i++){
		cout<<v[i]<<' ';
	}
	cout<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2060 KiB
3Hibás válasz48ms19208 KiB
subtask20/10
4Hibás válasz39ms18012 KiB
5Hibás válasz45ms20352 KiB
6Hibás válasz50ms22504 KiB
7Hibás válasz52ms24936 KiB
subtask30/15
8Elfogadva48ms48024 KiB
9Elfogadva45ms48480 KiB
10Hibás válasz64ms50780 KiB
11Hibás válasz57ms50848 KiB
12Hibás válasz54ms50644 KiB
13Hibás válasz57ms52456 KiB
14Hibás válasz52ms51872 KiB
subtask40/35
15Hibás válasz3ms13832 KiB
16Elfogadva3ms13840 KiB
17Elfogadva3ms13860 KiB
18Hibás válasz3ms14000 KiB
19Hibás válasz3ms14232 KiB
20Hibás válasz3ms14360 KiB
21Hibás válasz3ms14236 KiB
22Hibás válasz3ms14248 KiB
subtask50/40
23Hibás válasz48ms31616 KiB
24Elfogadva39ms33308 KiB
25Elfogadva37ms34848 KiB
26Hibás válasz52ms34148 KiB
27Hibás válasz48ms35120 KiB
28Hibás válasz54ms36972 KiB
29Hibás válasz50ms37920 KiB
30Hibás válasz52ms38460 KiB
31Hibás válasz50ms39212 KiB
32Hibás válasz54ms40128 KiB
33Hibás válasz57ms42104 KiB