답안 #40433

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
40433 2018-02-01T13:01:33 Z MladenP Pipes (CEOI15_pipes) C++14
20 / 100
3294 ms 65536 KB
#include<bits/stdc++.h>
#define STIZE(x) fprintf(stderr, "STIZE%d\n", x);
#define PRINT(x) fprintf(stderr, "%s = %d\n", #x, x);
#define NL(x) printf("%c", " \n"[(x)]);
#define lld long long
#define pii pair<int,int>
#define pb push_back
#define fi first
#define se second
#define mid (l+r)/2
#define endl '\n'
#define all(a) begin(a),end(a)
#define sz(a) int((a).size())
#define LINF 1000000000000000LL
#define INF 1000000000
#define EPS 1e-9
using namespace std;
#define MAXN 30010
vector<unsigned short> adj[MAXN];
int dsu[MAXN];
int fup[MAXN], in[MAXN], out[MAXN], timer = 0;
bool pos[MAXN];
map<pair<short, short>, int> e;
int root(int x) {
    while(x != dsu[x]) {
        dsu[x] = dsu[dsu[x]];
        x = dsu[x];
    }
    return x;
}
void build(unsigned short node, unsigned short prev) {
    pos[node] = 1;
    in[node] = fup[node] = ++timer;
    for(auto x : adj[node]) {
        if(x != prev && !pos[x]) build(x, node), e[{min(node,x),max(node,x)}]--;
    }
    out[node] = ++timer;
}
bool inSubtree(int x, int y) { //da li je y u subtree x
    return (in[x] < in[y] && out[x] > out[y]);
}
bool backEdge(int x, int y) {
    if(e[{min(x,y), max(x,y)}] == 0) return 0;
    if(!inSubtree(x, y)) return 0;
    if(root(x) != root(y)) return 0;
    return 1;
}
int build1(int node, int prev) {
    pos[node] = 1;
    for(auto x : adj[node]) {
        if(x != prev && !pos[x]) {
            fup[node] = min(fup[node], build1(x, node));
        }
        if(fup[x] > in[node]) {
            printf("%d %d\n", node, x);
        }
    }
    return fup[node];
}
int main() {
    int n, m; scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++) dsu[i] = i;
    for(int i = 0; i < m; i++) {
        unsigned short x, y; scanf("%hu%hu", &x, &y);
        adj[x].pb(y);
        adj[y].pb(x);
        e[{min(x,y), max(x,y)}]++;
        if(root(x) != root(y)) {
            dsu[root(x)] = root(y);
        }
    }
    for(int i = 1; i <= n; i++) if(!pos[i]) build(i, i);
    for(int i = 1; i <= n; i++) {
        for(auto x : adj[i]) {
            if(backEdge(x, i)) {
                fup[i] = min(fup[i], in[x]);
            } else if(backEdge(i, x)) {
                fup[x] = min(in[i], fup[x]);
            }
        }
    }
    for(int i = 1; i <= n; i++) pos[i] = 0;
    for(int i = 1; i <= n; i++) if(!pos[i]) build1(i, i);
    return 0;
}

Compilation message

pipes.cpp: In function 'int main()':
pipes.cpp:61:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     int n, m; scanf("%d%d", &n, &m);
               ~~~~~^~~~~~~~~~~~~~~~
pipes.cpp:64:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         unsigned short x, y; scanf("%hu%hu", &x, &y);
                              ~~~~~^~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1024 KB Output is correct
2 Correct 2 ms 1024 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 2048 KB Output is correct
2 Correct 15 ms 1856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1579 ms 32124 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3294 ms 54600 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2212 ms 65536 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 2096 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 4 ms 2176 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 2048 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 4 ms 2048 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 4 ms 2148 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -