Submission #244546

# Submission time Handle Problem Language Result Execution time Memory
244546 2020-07-04T09:28:44 Z tqbfjotld Pipes (CEOI15_pipes) C++14
30 / 100
388 ms 16568 KB
///lib code still allowed right
#include <vector>
#include <utility>
#include <cstdio>
#include <cstring>
using namespace std;

#define MAXN 10005

int low[MAXN];
int order[MAXN];
int cur = 1;
vector<int > adjl[MAXN];
int root = 0;
int temp[MAXN];

///ensure no duplicate edges first though
void dfs(int node, int parent){
    order[node] = cur;
    cur++;
    low[node] = order[node];
    for (auto x : adjl[node]){
        temp[x]++;
    }
    for (auto x : adjl[node]){
        if (temp[x]==0) continue;
        temp[x]--;
        bool thing = false;
        if (temp[x]!=0) {
            thing = true;
            temp[x] = 0;
        }
        if (order[x]==-1){
            dfs(x,thing?-1:node);
            if (low[node]==-1 || (low[x]!=-1 && low[x]<low[node])){
                low[node] = low[x];
            }
            if (node!=root){
                if (low[x]==-1 || low[x]>=order[node]){
                }
            }
            else{
            }
        }
        else if (x!=parent){
            if (low[node]==-1 || order[x]<low[node]) low[node] = order[x];
        }
    }
}
//ans is number of components after removing node (>1 if is articulation point)
//bridge break a component if it is removed
//HAVE NOT TESTED YET (but should be correct though)
inline bool isBridge(int a, int b){
    if (order[b]<order[a]) swap(a,b);
    return low[b]>order[a];
}

int n,e;


int main(){
    scanf("%d%d",&n,&e);
    for (int x = 0; x<e; x++){
        int a,b;
        scanf("%d%d",&a,&b);
        a--;b--;
        adjl[a].push_back(b);
        adjl[b].push_back(a);
    }

    memset(low,-1,sizeof(low));
    memset(order,-1,sizeof(order));
    for (root = 0; root<n; root++){
        if (order[root]==-1) dfs(root,-1);
    }
    for (int x = 0; x<n; x++){
        //printf("%d: order: %d, low: %d\n",1+x,order[x],low[x]);
    }
    for (int x = 0; x<n; x++){
        for (auto y : adjl[x]){
            if (y<x){
                if (isBridge(x,y)){
                    printf("%d %d\n",x+1,y+1);
                }
            }
        }
    }

}



Compilation message

pipes.cpp: In function 'int main()':
pipes.cpp:62:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&e);
     ~~~~~^~~~~~~~~~~~~~
pipes.cpp:65:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&a,&b);
         ~~~~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 1024 KB Output is correct
2 Correct 9 ms 896 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 171 ms 8696 KB Output is correct
2 Correct 163 ms 8056 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 367 ms 11896 KB Output is correct
2 Runtime error 388 ms 16568 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 6 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -