Submission #4208

#TimeUsernameProblemLanguageResultExecution timeMemory
4208cki86201파일 삭제 (GA3_delete)C++98
120 / 120
80 ms119664 KiB
#include<algorithm>
#include<string.h>
using namespace std;
int Dp[3030][10010];
int R[3030],L[3030],tot[3030];
int st[3030],en[6060];
short next[6060];
bool check[3030];
int ord[3030],co;
int now,sum;

void dfs(int x)
{
	check[x]=1;
	L[x]=now;
	for(int i=st[x];i;i=next[i]){
		if(!check[en[i]]){dfs(en[i]);tot[x]+=tot[en[i]];}
	}
	ord[++co]=now=x;
}

void addedge(int s,int d,int c)
{
	next[c]=st[s];
	st[s]=c;
	en[c]=d;
}

int DeletePlan( int M, int N, int K, int *A, int *B){
	int i;
	for(i=0;i<M;i++){R[A[i]]++;tot[A[i]]++;}
	for(i=1;i<N;i++){
		addedge(i,B[i],2*i);
		addedge(B[i],i,2*i+1);
	}
	dfs(0);
	memset(Dp,1,sizeof(Dp));
	Dp[0][0]=0;
	for(i=1;i<=N;i++){
		int x=ord[i],j;
		for(j=0;j<=sum;j++)Dp[x][j]=Dp[ord[i-1]][j];
		for(j=sum+1;j<=sum+R[x];j++)Dp[x][j]=Dp[x][j-1]+1;
		for(j=sum+R[x];j>=tot[x];j--){
			Dp[x][j]=min(Dp[x][j],Dp[L[x]][j-tot[x]]+1);
		}
		sum+=R[x];
	}
	return Dp[0][K];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...