Submission #24677

#TimeUsernameProblemLanguageResultExecution timeMemory
24677BruteforcemanPipes (CEOI15_pipes)C++11
100 / 100
1478 ms13984 KiB
#include "bits/stdc++.h" using namespace std; int *par; int *bic; vector <int> *g; int *low, *disc; bitset <100005> vis; vector <int> l, r; int root(int x, int *a) { if(a[x] == x) return x; return a[x] = root(a[x], a); } void join(int x, int y, int *a) { x = root(x, a); y = root(y, a); if(x != y) { a[x] = y; } } int tym; void dfs(int x, int parent) { vis[x] = 1; low[x] = disc[x] = ++tym; bool see = false; for(auto i : g[x]) { if (!see && i == parent) { see = true; continue; } if(vis[i] == 0) { dfs(i, x); low[x] = min(low[x], low[i]); if(disc[x] < low[i]) { l.push_back(x); r.push_back(i); } } else if (vis[i] == 1) { low[x] = min(low[x], disc[i]); } } } int main(int argc, char const *argv[]) { int n, m; scanf("%d %d", &n, &m); par = new int [n + 5]; bic = new int [n + 5]; for(int i = 1; i <= n; i++) { par[i] = i; bic[i] = i; } for(int i = 1; i <= m; i++) { int p, q; scanf("%d %d", &p, &q); if(root(p, par) != root(q, par)) { join(p, q, par); l.push_back(p); r.push_back(q); } else if (root(q, bic) != root(p, bic)) { join(p, q, bic); l.push_back(p); r.push_back(q); } } delete par; delete bic; g = new vector <int> [n + 5]; for(size_t i = 0; i < l.size(); i++) { g[l[i]].push_back(r[i]); g[r[i]].push_back(l[i]); } l.clear(); r.clear(); low = new int [n + 5]; disc = new int [n + 5]; for(int i = 1; i <= n; i++) { if(vis[i] == 0) { dfs(i, 0); } } for(size_t i = 0; i < l.size(); i++) { printf("%d %d\n", l[i], r[i]); } delete low; delete disc; return 0; }

Compilation message (stderr)

pipes.cpp: In function 'int main(int, const char**)':
pipes.cpp:49:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~~
pipes.cpp:60:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &p, &q);
   ~~~~~^~~~~~~~~~~~~~~~~
#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...