Submission #11150

#TimeUsernameProblemLanguageResultExecution timeMemory
11150tncks0121Senior Postmen (BOI14_postmen)C++14
100 / 100
447 ms18456 KiB
//
//  main.cpp
//  BOI14_postmen
//
//  Created by 박수찬 on 14. 11. 14..
//  Copyright (c) 2014년 박수찬. All rights reserved.
//
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <math.h>
#include <assert.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <string>
#include <functional>
#include <vector>
#include <numeric>
#include <deque>
#include <utility>
#include <bitset>
#include <limits.h>
#include <list>
#include <iostream>
 
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
typedef double lf;
typedef unsigned int uint;
typedef long double llf;
typedef pair<int, int> pii;
 
const int N_ = 500050, M_ = 2 * 500050;
 
int N, M;
 
bool passed[M_];
bool visited[N_];
int con[M_], lnk[M_], beg[N_], E;
int processed[N_];
 stack<int> stk; 
int main() {
    scanf("%d%d", &N, &M);
    for(int i = 1; i <= M; i++) {
        int u, v; scanf("%d%d", &u, &v);
         
        ++E; lnk[E] = beg[u]; beg[u] = E; con[E] = v;
        ++E; lnk[E] = beg[v]; beg[v] = E; con[E] = u;
    }
     
    memset(processed, -1, sizeof processed);
     
    for(int u = 1; u <= N; u++) {
        stk.push(u);
         
        while(!stk.empty()) {
            int cur = stk.top();
            visited[cur] = true;
             
            int &i = processed[cur];
            if(i < 0) i = beg[cur];
             
            bool updated = false;
            for(; i > 0; i = lnk[i]) {
                int nxt = con[i];
                int e = (i-1)/2+1; if(passed[e]) continue;
                passed[e] = true;
                if(visited[nxt]) {
                    while(!stk.empty() && stk.top() != nxt) {
                        int vt = stk.top(); stk.pop();
                        visited[vt] = false;
                        printf("%d ", vt);
                    }
                    printf("%d\n", nxt);
                } else {
                    stk.push(nxt);
                }
                updated = true;
                break;
            }
            if(!updated && !stk.empty()) stk.pop();
        }
    }
     
     
    return 0;
}

Compilation message (stderr)

postmen.cpp: In function 'int main()':
postmen.cpp:49:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &N, &M);
     ~~~~~^~~~~~~~~~~~~~~~
postmen.cpp:51:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         int u, v; scanf("%d%d", &u, &v);
                   ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...