Submission #760827

#TimeUsernameProblemLanguageResultExecution timeMemory
760827a_aguiloPipes (CEOI15_pipes)C++14
30 / 100
2671 ms65536 KiB
#include<bits/stdc++.h>

using namespace std;

vector<vector<int>> AdjList;
vector<int> lowlink, order;
vector<pair<int, int>> bridges;
int N, M, cnt;

void dfs (int node, int padre = -1){
    if(padre == -1){
        order[node] = 0;
        lowlink[node] = 0;
        for (int son: AdjList[node]){
            if(order[son] != -1) continue;
            cnt++;
            order[son] = cnt;
            dfs(son, node);
            if(lowlink[son] > order[node]) bridges.push_back({node, son});
        }
    }
    else{
        lowlink[node] = order[node];
        for (int son: AdjList[node]){
            if(son == padre) continue;
            if(order[son] != -1){
                lowlink[node] = min(lowlink[node], lowlink[son]);
                continue;
            }
            cnt++;
            order[son] = cnt;
            dfs(son, node);
            if(lowlink[son] > order[node]) bridges.push_back({node, son});
            if(lowlink[son] < order[node]){
                lowlink[node] = min(lowlink[node], lowlink[son]);
            }
        }
    }
}

int occurrences(int u, int v){
	int cnt = 0;
	for(int next: AdjList[u]){
		if(next == v) cnt++;
	}
	return cnt;
}

int main(){
    cin >> N >> M;
    AdjList = vector<vector<int>>(N);
    lowlink = vector<int>(N);
    order = vector<int>(N, -1);
    int u, v;
    for(int i = 0; i < M; ++i){
        cin >> u >> v; u--; v--;
        AdjList[u].push_back(v);
        AdjList[v].push_back(u);
    }
    for(int i = 0; i < N; ++i){
    	if(order[i] == -1) {
    		cnt = 0;
    		dfs(i);
    	}
    }
    for(pair<int, int> path: bridges) {
    	u = path.first; v = path.second;
    	if(occurrences(u, v) > 1) continue;
    	cout << path.first + 1 << " " << path.second + 1 << endl;
    }
    return 0;
}
#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...