Submission #1116096

#TimeUsernameProblemLanguageResultExecution timeMemory
1116096vjudge1Pipes (CEOI15_pipes)C++17
10 / 100
2177 ms65536 KiB
#include<bits/stdc++.h>
using namespace std;
#define pb push_back

const int lim=1e5+1;

int parent[lim];
int find(int i){
  if(i==parent[i])return i;
  return parent[i]=find(parent[i]);
}
void unite(int i,int j){
  i=find(i),j=find(j);
  parent[i]=j;
}

struct vec{
  int*targ=new int[5],size=5,have=0;
  void pb(int t){
    if(have==size){
      int*newy=new int[size*2];
      for(int i=0;i<size;i++)newy[i]=targ[i];
      size*=2;
      delete targ;
      targ=newy;
    }
    targ[have++]=t;
  }
  void clear(){
    have=0;
    delete targ;
  }
};

vec v[lim];
vector<pair<int,int>>edges;

int tin[lim],tout[lim],tt=1;

int dfs(int node,int par){
  if(tout[node])return tout[node];
  tout[node]=tin[node]=tt++;
  for(int i=0;i<v[node].have;i++){
    int j=v[node].targ[i];
    if(j==par)continue;
    int res=dfs(j,node);
    if(res<=tin[node]){
      unite(node,j);
    }
    tout[node]=min(tout[node],res);
  }
  return tout[node];
}

int n,m;
void findans(){
  for(auto[x,y]:edges){
    v[find(x)].pb(find(y));
    v[find(y)].pb(find(x));
  }
  for(int i=1;i<=n;i++){
    tout[i]=tin[i]=0;
  }
  tt=1;
  for(int i=1;i<=n;i++){
    if(!tout[i])dfs(i,0);
  }
  vector<pair<int,int>>edges1;
  for(auto[x,y]:edges){
    if(find(x)!=find(y))edges1.pb({x,y});
  }
  edges=edges1;
}

int main(){
  cin>>n>>m;
  for(int i=1;i<=n;i++)parent[i]=i;
  for(int i=0;i<m;i++){
    int x,y;
    cin>>x>>y;
    if(find(x)!=find(y))edges.pb({x,y});
    if(edges.size()==200000)findans();
  }
  findans();
  for(auto[x,y]:edges)cout<<x<<' '<<y<<'\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...