Submission #594267

#TimeUsernameProblemLanguageResultExecution timeMemory
594267andrei_boacaPipes (CEOI15_pipes)C++14
70 / 100
3012 ms19868 KiB
#include <bits/stdc++.h> #pragma GCC opimize("O3") using namespace std; vector<vector<int>> muchii1,muchii2; vector<int> nodes; int comp1[100005],comp2[100005],par[100005],niv[100005],nivmin[100005],lg1[100005],lg2[100005]; bool use[100005]; int n,m; void dfs(int nod) { use[nod]=1; nivmin[nod]=niv[nod]; for(int z=0;z<muchii1[nod].size();z++) { int node=muchii1[nod][z]; if(node==par[nod]) continue; if(!use[node]) { par[node]=nod; niv[node]=niv[nod]+1; dfs(node); nivmin[nod]=min(nivmin[nod],nivmin[node]); } else nivmin[nod]=min(nivmin[nod],niv[node]); } for(int z=0;z<muchii2[nod].size();z++) { int node=muchii2[nod][z]; if(node==par[nod]) continue; if(!use[node]) { par[node]=nod; niv[node]=niv[nod]+1; dfs(node); nivmin[nod]=min(nivmin[nod],nivmin[node]); } else nivmin[nod]=min(nivmin[nod],niv[node]); } int cnt=0; if(nivmin[nod]==niv[nod]&&par[nod]!=0) { for(int z=0;z<muchii1[nod].size();z++) { int i=muchii1[nod][z]; if(i==par[nod]) cnt++; } for(int z=0;z<muchii2[nod].size();z++) { int i=muchii2[nod][z]; if(i==par[nod]) cnt++; } if(cnt==1) cout<<par[nod]<<' '<<nod<<'\n'; } } void dfs1(int nod) { use[nod]=1; nodes.push_back(nod); for(int z=0;z<muchii1[nod].size();z++) { int i=muchii1[nod][z]; if(!use[i]) dfs1(i); } } void dfs2(int nod) { use[nod]=1; nodes.push_back(nod); for(int z=0;z<muchii2[nod].size();z++) { int i=muchii2[nod][z]; if(!use[i]) dfs2(i); } } void dsu_merge1(int a,int b) { int c1=comp1[a],c2=comp1[b]; if(lg1[c1]<lg1[c2]) { swap(c1,c2); swap(a,b); } nodes.clear(); dfs1(b); for(int i:nodes) { comp1[i]=c1; use[i]=0; } lg1[c1]+=lg1[c2]; lg1[c2]=0; } void dsu_merge2(int a,int b) { int c1=comp2[a],c2=comp2[b]; if(lg2[c1]<lg2[c2]) { swap(c1,c2); swap(a,b); } nodes.clear(); dfs2(b); for(int i:nodes) { comp2[i]=c1; use[i]=0; } lg2[c1]+=lg2[c2]; lg2[c2]=0; } int main() { cin>>n>>m; muchii1.resize(n+1); muchii2.resize(n+1); for(int i=1;i<=n;i++) { comp1[i]=i; comp2[i]=i; lg1[i]=1; lg2[i]=1; } int cnt=0; for(int i=1;i<=m;i++) { int a,b; cin>>a>>b; if(comp1[a]!=comp1[b]) { dsu_merge1(a,b); muchii1[a].push_back(b); muchii1[b].push_back(a); cnt++; } else { if(comp2[a]!=comp2[b]) { dsu_merge2(a,b); muchii2[a].push_back(b); muchii2[b].push_back(a); cnt++; } } } for(int i=1;i<=n;i++) if(!use[i]) dfs(i); return 0; }

Compilation message (stderr)

pipes.cpp:2: warning: ignoring '#pragma GCC opimize' [-Wunknown-pragmas]
    2 | #pragma GCC opimize("O3")
      | 
pipes.cpp: In function 'void dfs(int)':
pipes.cpp:13:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |     for(int z=0;z<muchii1[nod].size();z++)
      |                 ~^~~~~~~~~~~~~~~~~~~~
pipes.cpp:28:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |     for(int z=0;z<muchii2[nod].size();z++)
      |                 ~^~~~~~~~~~~~~~~~~~~~
pipes.cpp:46:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |         for(int z=0;z<muchii1[nod].size();z++)
      |                     ~^~~~~~~~~~~~~~~~~~~~
pipes.cpp:52:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |         for(int z=0;z<muchii2[nod].size();z++)
      |                     ~^~~~~~~~~~~~~~~~~~~~
pipes.cpp: In function 'void dfs1(int)':
pipes.cpp:66:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for(int z=0;z<muchii1[nod].size();z++)
      |                 ~^~~~~~~~~~~~~~~~~~~~
pipes.cpp: In function 'void dfs2(int)':
pipes.cpp:77:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |     for(int z=0;z<muchii2[nod].size();z++)
      |                 ~^~~~~~~~~~~~~~~~~~~~
#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...