Submission #527244

#TimeUsernameProblemLanguageResultExecution timeMemory
527244siewjhPipes (CEOI15_pipes)C++17
10 / 100
832 ms36276 KiB
#include <iostream> #include <vector> #include <algorithm> #include <climits> #include <set> using namespace std; const int MAXN = 4005; vector<int> adjlist[MAXN]; int tvis[MAXN], lo[MAXN]; int cnt = 0; set<pair<int, int>> ans; void dfs(int x, int par) { tvis[x] = lo[x] = cnt++; for (auto nxt : adjlist[x]) { if (nxt == par) continue; if (tvis[nxt] != INT_MAX) lo[x] = min(lo[x], tvis[nxt]); else { dfs(nxt, x); lo[x] = min(lo[x], lo[nxt]); if (lo[nxt] > tvis[x]) ans.insert({ min(nxt, x), max(nxt, x) }); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int nodes, edges; cin >> nodes >> edges; set<pair<int, int>> elist, mult; for (int i = 0; i < edges; i++) { int a, b; cin >> a >> b; if (a > b) swap(a, b); adjlist[a].push_back(b); adjlist[b].push_back(a); if (elist.count({ a, b })) mult.insert({ a, b }); elist.insert({ a, b }); } for (int i = 1; i <= nodes; i++) tvis[i] = INT_MAX; for (int i = 1; i <= nodes; i++) if (tvis[i] == INT_MAX) dfs(i, -1); for (auto x : ans) if (!mult.count(x)) cout << x.first << ' ' << x.second << '\n'; 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...