제출 #104443

#제출 시각아이디문제언어결과실행 시간메모리
104443luciocfChase (CEOI17_chase)C++14
50 / 100
4082 ms97656 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e5+10;
const int maxk = 110;

typedef long long ll;

int n, k;

int a[maxn];

ll soma[maxn];
ll dp[maxn][maxk];

vector<int> grafo[maxn];

void dfs(int u, int p)
{
	ll x = soma[u]-1ll*a[p];
	for (int i = 1; i <= k; i++)
	{
		dp[u][i] = dp[p][i];
		dp[u][i] = max(dp[u][i], x+dp[p][i-1]);
	}

	for (auto v: grafo[u])
		if (v != p)
			dfs(v, u);
}

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

	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);

	for (int i = 1; i < n; i++)
	{
		int u, v;
		scanf("%d %d", &u, &v);

		grafo[u].push_back(v); grafo[v].push_back(u);
	}

	for (int i = 1; i <= n; i++)
		for (auto v: grafo[i])
			soma[i] += 1ll*a[v];

	ll ans = 0;

	if (n > 1000)
	{
		dfs(1, 0);

		for (int i = 1; i <= n; i++)
			ans = max(ans, dp[i][k]);

		printf("%lld\n", ans);
		return 0;
	}

	for (int i = 1; i <= n; i++)
	{
		memset(dp, 0, sizeof dp);
		dfs(i, 0);
		
		for (int i = 1; i <= n; i++)
			ans = max(ans, dp[i][k]);
	}

	printf("%lld\n", ans);
}

컴파일 시 표준 에러 (stderr) 메시지

chase.cpp: In function 'int main()':
chase.cpp:35:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &k);
  ~~~~~^~~~~~~~~~~~~~~~~
chase.cpp:38:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &a[i]);
   ~~~~~^~~~~~~~~~~~~
chase.cpp:43:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &u, &v);
   ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...