제출 #634

#제출 시각아이디문제언어결과실행 시간메모리
634gs13068파일 삭제 (GA3_delete)C++98
15 / 120
78 ms118380 KiB
#include<vector> int indeg[3000]; int p[3000]; int c[3000]; int q[3000]; int qn,K; int stack[10000]; 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=1000000; 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(j=0;j<graph[x].size();j++) { GetPlan(before,graph[x][j]); before=graph[x][j]; if(K<c[x]) { stackm=1000000; 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++; } } } } 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]=1000000; 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...