Submission #59262

#TimeUsernameProblemLanguageResultExecution timeMemory
59262TadijaSebezFriend (IOI14_friend)C++11
100 / 100
129 ms11972 KiB
#include <stdio.h>
#include <vector>
using namespace std;
#define mp make_pair
#define pb push_back
const int N=100050;
int p[N],q[N],c[N];
vector<pair<int,int> > E[N];
void AddEdge(int u, int v, int w){ E[u].pb(mp(v,w));}
int max(int a, int b){ return a>b?a:b;}
int max(int a, int b, int c){ return max(a,max(b,c));}
void DFS(int u)
{
	p[u]=c[u];q[u]=0;
	for(int i=0;i<E[u].size();i++)
	{
		int v=E[u][i].first;
		int w=E[u][i].second;
		DFS(v);
		if(w==0)
		{
			q[u]+=max(q[v],p[v]);
			p[u]+=q[v];
		}
		if(w==1)
		{
			p[u]=max(p[u]+p[v],p[u]+q[v],p[v]+q[u]);
			q[u]+=q[v];
		}
		if(w==2)
		{
			p[u]=max(p[u]+q[v],p[v]+q[u]);
			q[u]+=q[v];
		}
		//printf("%i %i %i:%i %i\n",u-1,v-1,w,p[u],q[u]);
	}
}
int findSample(int n, int co[], int par[], int ty[])
{
	int i;
	for(i=n-1;i;i--) AddEdge(par[i]+1,i+1,ty[i]);
	//for(i=1;i<n;i++) if(ty[i]==2) AddEdge(par[i]+1,i+1,ty[i]);
	//for(i=1;i<n;i++) if(ty[i]==1) AddEdge(par[i]+1,i+1,ty[i]);
	//for(i=1;i<n;i++) if(ty[i]==0) AddEdge(par[i]+1,i+1,ty[i]);
	for(i=1;i<=n;i++) c[i]=co[i-1];
	DFS(1);
	return max(p[1],q[1]);
}

Compilation message (stderr)

friend.cpp: In function 'void DFS(int)':
friend.cpp:15:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<E[u].size();i++)
              ~^~~~~~~~~~~~
#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...