# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
17658 | Namnamseo | 어르신 집배원 (BOI14_postmen) | C++14 | 399 ms | 20012 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <vector>
int n,m;
int start[ 500010];
int endp [1000010];
int next [1000010];
bool dead[1000010];
int counter;
void addEdge(int from,int to)
{
next [counter] = start[from];
start[from ] = counter;
endp [counter] = to;
++counter;
}
int stack[500010];
int hi [500010];
int top=-1;
void push(int x) { stack[++top]=x; }
int pop ( ) { return stack[top--]; }
bool visited[500010];
int main()
{
counter=1;
scanf("%d%d",&n,&m);
int i,a,b;
for(i=0;i<m;i++){
scanf("%d%d",&a,&b);
addEdge(a,b);
addEdge(b,a);
}
push(1);
int cur;
int t=0;
while(top>=0)
{
cur=stack[top];
while(dead[start[cur]] && start[cur]) {
start[cur]=next[start[cur]];
}
if(start[cur]==0) {
hi[t++]=cur;
--top;
continue;
} else {
push(endp[start[cur]]);
dead[start[cur]]=true;
if(start[cur]%2){
dead[start[cur]+1]=true;
} else dead[start[cur]-1]=true;
}
}
top=-1;
int temp;
for(i=0;i<t;++i)
{
cur = hi[i];
//printf("%d ",cur);
if(visited[cur])
{
while((temp=pop())!=cur) {
printf("%d ",temp);
visited[temp]=false;
}
printf("%d\n",cur);
push(cur);
} else {
visited[cur]=true;
push(cur);
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |