Submission #245392

#TimeUsernameProblemLanguageResultExecution timeMemory
245392lycPipes (CEOI15_pipes)C++14
100 / 100
1845 ms16292 KiB
#include <stdio.h> #include <vector> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) (int)(x).size() #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for (int i=(a);i>=(b);--i) const int mxN = 1e5+5; int N, M; int E[2*mxN], ne; vector<int> al[mxN]; struct UFDS { int p[mxN], s[mxN]; UFDS() { FOR(i,1,N) p[i] = i, s[i] = 1; } int finds(int i) { return (p[i] == i) ? i : (p[i] = finds(p[i])); } bool unions(int i, int j) { int x = finds(i), y = finds(j); if (x == y) return 0; if (s[x] < s[y]) swap(x,y); p[y] = x, s[x] += s[y]; return 1; } }; int num[mxN], low[mxN], cnt; void dfs(int u, int p) { num[u] = low[u] = cnt++; for (int e : al[u]) { if (e == p) continue; int v = E[e]^u; if (num[v] == -1) { dfs(v,e); low[u] = min(low[u],low[v]); if (low[v] > num[u]) printf("%d %d\n", u, v); } else low[u] = min(low[u],num[v]); } } int main() { scanf("%d %d", &N, &M); UFDS UF[2]; ne = 0; FOR(i,1,M){ int U, V; scanf("%d %d", &U, &V); FOR(j,0,1){ if (UF[j].unions(U,V)) { al[U].push_back(ne); al[V].push_back(ne); E[ne++] = U^V; break; } } } FOR(i,1,N) num[i] = -1; cnt = 0; FOR(i,1,N) if (num[i] == -1) dfs(i,-1); }

Compilation message (stderr)

pipes.cpp: In function 'int main()':
pipes.cpp:45:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &N, &M);
     ~~~~~^~~~~~~~~~~~~~~~~
pipes.cpp:49:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         int U, V; scanf("%d %d", &U, &V);
                   ~~~~~^~~~~~~~~~~~~~~~~
#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...