Submission #1269011

#TimeUsernameProblemLanguageResultExecution timeMemory
1269011nikolashamiFriend (IOI14_friend)C++20
100 / 100
17 ms3908 KiB
#include<bits/stdc++.h>
#include"friend.h"
using namespace std;
using ll=long long;

#define __MAXSIZE__ 100002

const ll N=1e5+7;
ll a[N],hst[N],tp[N],_n;

int findSample(int __n,int confidence[],int host[],int protocol[]){
	_n=__n;
	for(int i=0;i<_n;++i){
		a[1+i]=confidence[i];
		if(i)hst[1+i]=host[i]+1;
		if(i)tp[1+i]=protocol[i];
	}	

	ll ans=0;
	for(int i=_n;i>1;--i){
		ll u=i,v=hst[i];
		if(tp[i]==1)a[v]+=a[u];
		else if(tp[i]==2)a[v]=max(a[v],a[u]);
		else{
			ans+=a[u];
			a[v]=max(0ll,a[v]-a[u]);
		}
	}

	return ans+a[1];
}

/*
// Confidence
int confidence[__MAXSIZE__];

// Host
int host[__MAXSIZE__];

// Protocol
int protocol[__MAXSIZE__];

// Main
int main(void)
{
	int n,i;

	// Number of people
	assert(scanf("%d",&n)==1);
	
	// Confidence
	for(i=0;i<n;i++)
		assert(scanf("%d",&confidence[i])==1);
	
	// Host and Protocol
	for(i=1;i<n;i++)
		assert(scanf("%d %d",&host[i],&protocol[i])==2);
	
	// Answer
	printf("%d\n",findSample(n,confidence,host,protocol));
	return 0;
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...