Submission #154719

#TimeUsernameProblemLanguageResultExecution timeMemory
154719nicolaalexandraPipes (CEOI15_pipes)C++14
10 / 100
5067 ms13392 KiB
#include <iostream> #include <vector> #define DIM 100002 using namespace std; int t[DIM],t2[DIM],viz[DIM],low[DIM],niv[DIM]; vector <int> L[DIM]; int n,m,i,j,x,y,idx; inline int get_rad (int x){ int nr = x; while (t[x] > 0) x = t[x]; while (t[nr] > 0){ int aux = t[nr]; t[nr] = x; nr = aux; } return x; } inline int get_rad2 (int x){ int nr = x; while (t2[x] > 0) x = t2[x]; while (t2[nr] > 0){ int aux = t2[nr]; t2[nr] = x; nr = aux; } return x; } void dfs(int nod, int tata){ viz[nod] = 1; niv[nod] = low[nod] = ++idx; for(int i=0;i<L[nod].size();i++){ int vecin = L[nod][i]; if(vecin == tata) continue; if(viz[vecin] == 1) low[nod] = min (low[nod],niv[vecin]); else { dfs (vecin, nod); low[nod] = min (low[nod],low[vecin]); if (low[vecin] > niv[nod]) cout<<nod<<" "<<vecin<<"\n"; }}} int main (){ cin>>n>>m; for (i=1;i<=n;i++) t[i] = t2[i] = -1; for (i=1;i<=m;i++){ cin>>x>>y; int rx = get_rad (x), ry = get_rad (y); if (rx != ry){ L[x].push_back(y); L[y].push_back(x); if (t[rx] < t[ry]){ t[rx] += t[ry]; t[ry] = rx; } else { t[ry] += t[rx]; t[rx] = ry; } } else { /// nodurile se alfa deja in aceeasi multime si toate muchiile /// de pe drumul de la x la y NU pot fi critice /// oare merge daca fac din nou paduri pt nodurile astea? int rx2 = get_rad2 (x), ry2 = get_rad2 (y); if (rx2 != ry2){ L[x].push_back(y); /// astea ar fi muchiile de intoarcere pt biconexe L[y].push_back(x); if (t2[rx2] < t2[ry2]){ t2[rx2] += t2[ry2]; t2[ry2] = rx2; } else { t2[ry2] += t2[rx2]; t2[rx2] = ry2; }}}} for (i=1;i<=n;i++) if (!viz[i]) dfs (i,0); return 0; }

Compilation message (stderr)

pipes.cpp: In function 'void dfs(int, int)':
pipes.cpp:33:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<L[nod].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...