Submission #496696

#TimeUsernameProblemLanguageResultExecution timeMemory
496696aryan12Pipes (CEOI15_pipes)C++17
40 / 100
1045 ms65536 KiB
#include <bits/stdc++.h> using namespace std; //#define int long long mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); const int N = 1e5 + 5; int par[2][N]; vector<int> g[N]; int disc[N], low[N], tim = 0; bool vis[N]; void dfs(int node, int parent) { vis[node] = true; disc[node] = ++tim; low[node] = tim; bool flag = false; for(int i = 0; i < g[node].size(); i++) { if(g[node][i] == parent && !flag) { flag = true; continue; } if(vis[g[node][i]]) { low[node] = min(low[node], disc[g[node][i]]); } else { dfs(g[node][i], node); low[node] = min(low[node], low[g[node][i]]); if(low[g[node][i]] > disc[node]) { cout << node << " " << g[node][i] << "\n"; } } } } int Find(int x, int d) { if(par[d][x] == x) { return x; } return par[d][x] = Find(par[d][x], d); } void Unite(int u, int v, int d) { v = Find(v, d), u = Find(u, d); par[d][v] = u; } void Solve() { int n, m; cin >> n >> m; for(int i = 0; i <= n; i++) { par[0][i] = i; par[1][i] = i; } for(int i = 0; i < m; i++) { int u, v; cin >> u >> v; if(Find(u, 0) != Find(v, 0)) { Unite(u, v, 0); g[u].push_back(v); g[v].push_back(u); } else if(Find(u, 1) != Find(v, 1)) { Unite(u, v, 1); g[u].push_back(v); g[v].push_back(u); } } for(int i = 1; i <= n; i++) { if(!vis[i]) { dfs(i, -1); } } } int32_t main() { auto begin = std::chrono::high_resolution_clock::now(); ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; while(t--) { Solve(); } auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; return 0; }

Compilation message (stderr)

pipes.cpp: In function 'void dfs(int, int)':
pipes.cpp:18:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |  for(int i = 0; i < g[node].size(); i++) {
      |                 ~~^~~~~~~~~~~~~~~~
#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...