Submission #994647

# Submission time Handle Problem Language Result Execution time Memory
994647 2024-06-08T03:04:45 Z vjudge1 Pipes (CEOI15_pipes) C++17
0 / 100
35 ms 6740 KB
#include<bits/stdc++.h>
using namespace std;
#define N 100100
#define C cyc.abp
struct unionf{
    int par[N];
    unionf(){
        for(int i=0;i<N;i++)
            par[i]=i;
    }
    int abp(int a){
        return (par[a]-a?par[a]=abp(par[a]):a);
    }
} cyc,comp;
int par[N],sz[N],dep[N];
set<pair<int,int>>st;
vector<pair<int,int>>adj[N];
int depth=0,times=0;
void repos(int x,int p,int d){
    depth++;
    if(depth>1.5e5){
        cout<<"by";
        exit(0);
    }
    par[x]=p,dep[x]=d;
    for(auto[i,j]:adj[x])
        if(C(i)-p&&C(i)!=x)
            repos(C(i),x,d+1);
    depth--;
}
int mergepar(int a){
    times++;
    if(times>1.5e5){
        exit(1);
    }
    int b=par[a];
    dep[a]=dep[b];
    par[a]=par[b];
    if(adj[a].size()<adj[b].size())
        swap(a,b);
    cyc.par[b]=a;
    for(auto[i,j]:adj[b])
        if(C(i)-a&&C(i)-par[a]&&C(i)-b)
            adj[a].push_back({i,j}),par[i]=a;
    adj[b].clear();
    return a;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        sz[i]=1;
    while(m--){
        int a,b;
        cin>>a>>b;
        if(C(a)==C(b))
            continue;
        if(comp.abp(a)==comp.abp(b)){
            int acyc=C(a),bcyc=C(b);
            while(acyc-bcyc){
                if(dep[acyc]<dep[bcyc])
                    swap(acyc,bcyc);
                acyc=mergepar(acyc),
                bcyc=C(bcyc);
            }
        } else {
            int acyc=C(a),bcyc=C(b);
            int acomp=comp.abp(a),bcomp=comp.abp(b);
            if(sz[acomp]<sz[bcomp]) swap(a,b),
                swap(acyc,bcyc),swap(acomp,bcomp);
            sz[acomp]+=sz[bcomp];
            comp.par[bcomp]=acomp;
            repos(bcyc,acyc,dep[acyc]+1);
            adj[acyc].push_back({b,a});
            adj[bcyc].push_back({a,b});
        }
    }
    for(int i=1;i<=n;i++)if(C(i)==i)
        for(auto[j,k]:adj[i]) if(C(j)-i)
            st.insert({min(j,k),max(j,k)});
    for(auto[i,j]:st)
        cout<<i<<' '<<j<<'\n';
}
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 4696 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 4700 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 4700 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 4 ms 4956 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 7 ms 5208 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 20 ms 6232 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 20 ms 6312 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 35 ms 6724 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 28 ms 6740 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 25 ms 6488 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -