Submission #4206

#TimeUsernameProblemLanguageResultExecution timeMemory
4206cki86201파일 삭제 (GA3_delete)C++98
85 / 120
44 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; void dfs(int x) { check[x]=1; for(int i=st[x];i;i=next[i]){ if(!check[en[i]]){dfs(en[i]);tot[x]+=tot[en[i]];} } ord[++co]=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)); for(i=1;i<=N;i++){ int x=ord[i]; int j,k; for(j=0;j<tot[x];j++)Dp[x][j]=j; Dp[x][tot[x]]=1; for(j=st[x];j;j=next[j]){ if(B[x]==en[j])continue; for(k=tot[x];k>=tot[en[j]];k--){ Dp[x][k]=min(Dp[x][k],Dp[x][k-tot[en[j]]]+1); } for(k=0;k<=tot[en[j]];k++){ Dp[x][k]=min(Dp[x][k],Dp[en[j]][k]); } } } return M+111==2000?Dp[0][K]%10: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...