Submission #631

#TimeUsernameProblemLanguageResultExecution timeMemory
631gs13068파일 삭제 (GA3_delete)C++98
105 / 120
221 ms118352 KiB
#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]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...