#include<vector>
int indeg[3000];
int p[3000];
int c[3000];
int q[3000];
int qn,K;
int stack[3000];
int stackn,stackm;
int d[3001][10001];
int t[10001];
std::vector<int> graph[3000];
inline void GetPlan(int before,int x)
{
int i,j;
if(K<c[x])
{
stackm=10000;
for(i=0;i<=K;i++)
{
if(stackm>d[before][i]-i)stackm=d[before][i]-i;
d[x][i]=stackm+i;
}
}
else
{
stackn=stackm=0;
for(i=0;i<c[x];i++)
{
while(stackm-stackn&&stack[stackm-1]>d[before][i]-i)stackm--;
stack[stackm++]=d[before][i]-i;
d[x][i]=stack[stackn]+i;
}
for(i=c[x];i<=K;i++)
{
while(stackm-stackn&&stack[stackm-1]>d[before][i]-i)stackm--;
stack[stackm++]=d[before][i]-i;
d[x][i]=stack[stackn]+i;
if(d[x][i]>d[before][i-c[x]]+1)d[x][i]=d[before][i-c[x]]+1;
if(stack[stackn]==d[before][i-c[x]]-(i-c[x]))stackn++;
}
}
for(i=0;i<graph[x].size();i++)
{
GetPlan(i?graph[x][i-1]:before,graph[x][i]);
for(j=0;j<=K;j++)d[x][j]=d[graph[x][i]][j]<d[x][j]?d[graph[x][i]][j]:d[x][j];
}
for(i=0;i<=K;i++)d[x][i]=d[before][i]<d[x][i]?d[before][i]:d[x][i];
}
int DeletePlan(int n,int m,int k,int *a, int *b)
{
int i,j;
K=k;
for(i=0;i<n;i++)c[a[i]]++;
for(i=0;i<m;i++){p[i]=b[i];if(b[i]>=0){indeg[b[i]]++;graph[b[i]].push_back(i);}}
for(i=0;i<m;i++)if(indeg[i]==0)q[qn++]=i;
for(i=0;i<qn;i++)
{
if(p[q[i]]>=0)
{
c[p[q[i]]]+=c[q[i]];
indeg[p[q[i]]]--;
if(indeg[p[q[i]]]==0)q[qn++]=p[q[i]];
}
}
for(i=1;i<=K;i++)d[3000][i]=10000;
GetPlan(3000,0);
return d[0][K];
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
118352 KB |
Output is correct |
2 |
Correct |
0 ms |
118352 KB |
Output is correct |
3 |
Incorrect |
0 ms |
118352 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
118352 KB |
Output is correct |
2 |
Correct |
0 ms |
118352 KB |
Output is correct |
3 |
Correct |
0 ms |
118352 KB |
Output is correct |
4 |
Correct |
0 ms |
118352 KB |
Output is correct |
5 |
Correct |
0 ms |
118352 KB |
Output is correct |
6 |
Correct |
0 ms |
118352 KB |
Output is correct |
7 |
Correct |
0 ms |
118352 KB |
Output is correct |
8 |
Correct |
0 ms |
118352 KB |
Output is correct |
9 |
Correct |
0 ms |
118352 KB |
Output is correct |
10 |
Correct |
0 ms |
118352 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
118352 KB |
Output is correct |
2 |
Correct |
3 ms |
118352 KB |
Output is correct |
3 |
Correct |
7 ms |
118352 KB |
Output is correct |
4 |
Correct |
2 ms |
118352 KB |
Output is correct |
5 |
Correct |
5 ms |
118352 KB |
Output is correct |
6 |
Correct |
0 ms |
118352 KB |
Output is correct |
7 |
Correct |
0 ms |
118352 KB |
Output is correct |
8 |
Correct |
0 ms |
118352 KB |
Output is correct |
9 |
Correct |
0 ms |
118352 KB |
Output is correct |
10 |
Correct |
1 ms |
118352 KB |
Output is correct |
11 |
Correct |
2 ms |
118352 KB |
Output is correct |
12 |
Correct |
5 ms |
118352 KB |
Output is correct |
13 |
Correct |
7 ms |
118352 KB |
Output is correct |
14 |
Correct |
21 ms |
118352 KB |
Output is correct |
15 |
Correct |
11 ms |
118352 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
118352 KB |
Output is correct |
2 |
Correct |
50 ms |
118352 KB |
Output is correct |
3 |
Correct |
17 ms |
118352 KB |
Output is correct |
4 |
Correct |
88 ms |
118352 KB |
Output is correct |
5 |
Correct |
38 ms |
118352 KB |
Output is correct |
6 |
Correct |
5 ms |
118352 KB |
Output is correct |
7 |
Correct |
7 ms |
118352 KB |
Output is correct |
8 |
Correct |
8 ms |
118352 KB |
Output is correct |
9 |
Correct |
64 ms |
118352 KB |
Output is correct |
10 |
Correct |
23 ms |
118352 KB |
Output is correct |
11 |
Correct |
102 ms |
118352 KB |
Output is correct |
12 |
Correct |
161 ms |
118352 KB |
Output is correct |
13 |
Correct |
118 ms |
118352 KB |
Output is correct |
14 |
Correct |
221 ms |
118352 KB |
Output is correct |
15 |
Correct |
213 ms |
118352 KB |
Output is correct |