제출 #244470

#제출 시각아이디문제언어결과실행 시간메모리
244470tqbfjotldPipes (CEOI15_pipes)C++14
20 / 100
1539 ms65540 KiB
///lib code still allowed right
#include <bits/stdc++.h>
using namespace std;

int low[100005];
int order[100005];
int cur = 1;
vector<pair<int,int> > adjl[100005]; ///(node,id)
int root = 0;

///ensure no duplicate edges first though
void dfs(int node, int pEdge){
    order[node] = cur;
    cur++;
    low[node] = order[node];
    for (auto x : adjl[node]){
        if (order[x.first]==-1){
            dfs(x.first,x.second);
            if (low[node]==-1 || (low[x.first]!=-1 && low[x.first]<low[node])){
                low[node] = low[x.first];
            }
            if (node!=root){
                if (low[x.first]==-1 || low[x.first]>=order[node]){
                }
            }
            else{
            }
        }
        else if (x.second!=pEdge){
            if (low[node]==-1 || order[x.first]<low[node]) low[node] = order[x.first];
        }
    }
}
//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,x});
        adjl[b].push_back({a,x});
    }

    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.first<x){
                if (isBridge(x,y.first)){
                    printf("%d %d\n",x+1,y.first+1);
                }
            }
        }
    }

}



컴파일 시 표준 에러 (stderr) 메시지

pipes.cpp: In function 'int main()':
pipes.cpp:46: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:49: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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...