Submission #808235
Source Code Expand
#include <bits/stdc++.h>
#define MAXN 2005
#define MYINF 1000000000
using namespace std;
static int dp[MAXN][MAXN];
static int a[2*MAXN];
static int s[MAXN];
static int mins[MAXN][MAXN];
int N, K;
int res;
void DFS (int point, int par)
{
dp[point][0] = 1;
int i, j;
for (i = s[point]; i < s[point+1]; i++)
{
if (a[i] != par)
{
DFS(a[i], point);
dp[point][0] += dp[a[i]][0];
mins[a[i]][0] = dp[a[i]][0];
for (j = 1; j <= K+1; j++)
{
mins[a[i]][j] = min(mins[a[i]][j-1], dp[a[i]][j]);
}
}
}
dp[point][1] = dp[point][0] - 1;
for (j = K+1; j > 1; j--)
{
int minSum = 0;
for (i = s[point]; i < s[point+1]; i++)
{
if (a[i] != par)
{
minSum += mins[a[i]][min(K-j+1, j-1)];
}
}
dp[point][j] = MYINF;
for (i = s[point]; i < s[point+1]; i++)
{
if (a[i] != par)
{
int temp = dp[a[i]][j-1] + minSum - mins[a[i]][min(K-j+1, j-1)];
dp[point][j] = min(dp[point][j], temp);
}
}
}
for (j = 0; j <= K+1; j++)
{
res = min(res, dp[point][j] + (N - dp[point][0]));
}
}
int main ()
{
static pair<int, int> data[MAXN];
scanf("%d %d",&N,&K);
int M = N-1;
int i;
memset(s, 0, sizeof(s));
for (i = 0; i < M; i++)
{
scanf("%d %d",&data[i].first,&data[i].second);
data[i].first--;
data[i].second--;
s[data[i].first]++;
s[data[i].second]++;
}
for (i = 1; i <= N; i++) s[i] += s[i-1];
for (i = 0; i < M; i++)
{
s[data[i].first]--;
a[s[data[i].first]] = data[i].second;
s[data[i].second]--;
a[s[data[i].second]] = data[i].first;
}
res = N;
DFS(0, -1);
printf("%d\n",res);
return 0;
}
Submission Info
Submission Time |
|
Task |
C - Shorten Diameter |
User |
eduardische |
Language |
C++14 (GCC 5.4.1) |
Score |
600 |
Code Size |
1672 Byte |
Status |
AC |
Exec Time |
129 ms |
Memory |
31744 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:63:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&N,&K);
^
./Main.cpp:69:48: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&data[i].first,&data[i].second);
^
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
600 / 600 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample-01.txt, sample-02.txt |
All |
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt |
Case Name |
Status |
Exec Time |
Memory |
000.txt |
AC |
4 ms |
256 KB |
001.txt |
AC |
4 ms |
256 KB |
002.txt |
AC |
4 ms |
256 KB |
003.txt |
AC |
4 ms |
256 KB |
004.txt |
AC |
4 ms |
256 KB |
005.txt |
AC |
4 ms |
256 KB |
006.txt |
AC |
4 ms |
256 KB |
007.txt |
AC |
4 ms |
384 KB |
008.txt |
AC |
4 ms |
384 KB |
009.txt |
AC |
30 ms |
16256 KB |
010.txt |
AC |
30 ms |
16256 KB |
011.txt |
AC |
30 ms |
16256 KB |
012.txt |
AC |
38 ms |
18432 KB |
013.txt |
AC |
30 ms |
16256 KB |
014.txt |
AC |
30 ms |
16384 KB |
015.txt |
AC |
34 ms |
17408 KB |
016.txt |
AC |
30 ms |
16384 KB |
017.txt |
AC |
31 ms |
16640 KB |
018.txt |
AC |
9 ms |
3072 KB |
019.txt |
AC |
6 ms |
1536 KB |
020.txt |
AC |
18 ms |
8448 KB |
021.txt |
AC |
32 ms |
15360 KB |
022.txt |
AC |
16 ms |
7936 KB |
023.txt |
AC |
8 ms |
2560 KB |
024.txt |
AC |
15 ms |
6528 KB |
025.txt |
AC |
7 ms |
2176 KB |
026.txt |
AC |
29 ms |
14976 KB |
027.txt |
AC |
33 ms |
16384 KB |
028.txt |
AC |
129 ms |
31744 KB |
029.txt |
AC |
65 ms |
25216 KB |
030.txt |
AC |
30 ms |
16256 KB |
031.txt |
AC |
31 ms |
16384 KB |
sample-01.txt |
AC |
4 ms |
256 KB |
sample-02.txt |
AC |
4 ms |
256 KB |