Submission #211239

#TimeUsernameProblemLanguageResultExecution timeMemory
211239LawlietMagic Tree (CEOI19_magictree)C++14
22 / 100
2094 ms24568 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXK = 30;
const int MAXN = 100010;

int n, m, k;

int t[MAXN];
int w[MAXN];
int dp[MAXN][MAXK];

vector< int > adj[MAXN];

void DFS(int cur)
{
	for(int i = 0 ; i < adj[cur].size() ; i++)
		DFS( adj[cur][i] );

	for(int j = 1 ; j <= k ; j++)
	{
		int sum = 0;
		if( t[cur] == j ) sum = w[cur];

		for(int i = 0 ; i < adj[cur].size() ; i++)
			sum += dp[ adj[cur][i] ][j];

		dp[cur][j] = max( dp[cur][j - 1] , sum );
	}
}

int main()
{
	scanf("%d %d %d",&n,&m,&k);

	for(int i = 2 ; i <= n ; i++)
	{
		int p;
		scanf("%d",&p);

		adj[p].push_back( i );
	}

	for(int i = 1 ; i <= m ; i++)
	{
		int node;
		scanf("%d",&node);
		scanf("%d %d",&t[node],&w[node]);
	}

	DFS( 1 );

	printf("%d\n",dp[1][k]);
}

Compilation message (stderr)

magictree.cpp: In function 'void DFS(int)':
magictree.cpp:18:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0 ; i < adj[cur].size() ; i++)
                  ~~^~~~~~~~~~~~~~~~~
magictree.cpp:26:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0 ; i < adj[cur].size() ; i++)
                   ~~^~~~~~~~~~~~~~~~~
magictree.cpp: In function 'int main()':
magictree.cpp:35:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d",&n,&m,&k);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
magictree.cpp:40:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&p);
   ~~~~~^~~~~~~~~
magictree.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&node);
   ~~~~~^~~~~~~~~~~~
magictree.cpp:49:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&t[node],&w[node]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...