Submission #441996

#TimeUsernameProblemLanguageResultExecution timeMemory
441996JovanBPipes (CEOI15_pipes)C++17
60 / 100
2077 ms25464 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int BLOCK = 10000; const int MAXN = 100000; vector <pair <int, tuple <int, int, int>>> graf[MAXN+5]; vector <pair <int, tuple <int, int, int>>> ngraf[MAXN+5]; bool visited[MAXN+5]; int in[MAXN+5]; int up[MAXN+5]; int gde[MAXN+5]; int ide[MAXN+5]; int tjm; void dfs_bridges(int v, int gr){ visited[v] = 1; in[v] = ++tjm; up[v] = in[v]; for(auto c : graf[v]){ if(visited[c.first]){ if(get<2>(c.second) == gr) continue; up[v] = min(up[v], up[c.first]); } else{ dfs_bridges(c.first, get<2>(c.second)); up[v] = min(up[v], up[c.first]); } } } void dfs_connect(int v, tuple <int, int, int> p, int lst){ int sd = lst; visited[v] = 1; ide[v] = v; if(up[v] >= in[v]){ if(lst){ ngraf[v].push_back({lst, p}); ngraf[lst].push_back({v, p}); } sd = v; } else ide[v] = gde[lst]; for(auto c : graf[v]){ if(!visited[c.first]) dfs_connect(c.first, c.second, sd); } } int main(){ ios_base::sync_with_stdio(false), cin.tie(0); cout.precision(10); cout << fixed; int n, m; cin >> n >> m; for(int i=1; i<=n; i++){ gde[i] = i; } int svih = 0; while(m > 0){ for(int i=1; i<=min(m, BLOCK); i++){ int a, b; cin >> a >> b; ++svih; graf[gde[a]].push_back({gde[b], {a, b, svih}}); graf[gde[b]].push_back({gde[a], {b, a, svih}}); } tjm = 0; for(int i=1; i<=n; i++) visited[i] = 0; for(int i=1; i<=n; i++) ngraf[i].clear(); for(int i=1; i<=n; i++){ if(!visited[gde[i]]) dfs_bridges(gde[i], 0); } for(int i=1; i<=n; i++) visited[i] = 0; for(int i=1; i<=n; i++){ if(!visited[gde[i]]) dfs_connect(gde[i], {0, 0, 0}, 0); } for(int i=1; i<=n; i++){ gde[i] = ide[gde[i]]; graf[i].clear(); for(auto c : ngraf[i]) graf[i].push_back(c); ngraf[i].clear(); } m -= BLOCK; } vector <pair <int, int>> results; for(int i=1; i<=n; i++){ for(auto c : graf[i]) results.push_back({get<0>(c.second), get<1>(c.second)}); } sort(results.begin(), results.end()); for(int i=0; i<results.size(); i++) if(i == 0 || results[i] != results[i-1]) cout << results[i].first << " " << results[i].second << "\n"; return 0; }

Compilation message (stderr)

pipes.cpp: In function 'int main()':
pipes.cpp:95:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for(int i=0; i<results.size(); i++) if(i == 0 || results[i] != results[i-1]) cout << results[i].first << " " << results[i].second << "\n";
      |                  ~^~~~~~~~~~~~~~~
#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...