답안 #994660

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
994660 2024-06-08T03:14:07 Z vjudge1 Pipes (CEOI15_pipes) C++17
0 / 100
5000 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){ 
    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){
    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&&dep[C(i)]>dep[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';
}
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5052 ms 4696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5008 ms 4696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5003 ms 4696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5038 ms 4952 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5071 ms 5212 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5049 ms 6236 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5016 ms 6332 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5046 ms 6740 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5044 ms 6740 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5038 ms 6480 KB Time limit exceeded
2 Halted 0 ms 0 KB -