답안 #994591

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
994591 2024-06-08T02:05:56 Z vjudge1 Pipes (CEOI15_pipes) C++17
0 / 100
5000 ms 7260 KB
#include<bits/stdc++.h>
using namespace std;
#define N 100100
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];
void repos(int x,int p,int d){
    par[x]=p,dep[x]=d;
    for(auto[i,j]:adj[x])
        if(i-p&&cyc.abp(i)!=x)
            repos(cyc.abp(i),x,d+1);
}
int mergepar(int a){
    int b=par[a];
    dep[a]=dep[b];
    if(adj[a].size()<adj[b].size())
        swap(a,b);
    vector<pair<int,int>>nadj;
    for(auto[i,j]:adj[b]) if(cyc.abp(i)-a)
        adj[a].push_back({i,j}),par[i]=a;
    adj[b].clear(),cyc.par[b]=a;
    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(cyc.abp(a)==cyc.abp(b))
            continue;
        if(comp.abp(a)==comp.abp(b)){
            int acyc=cyc.abp(a),bcyc=cyc.abp(b);
            while(acyc-bcyc){
                if(dep[acyc]<dep[bcyc])
                    swap(acyc,bcyc);
                acyc=mergepar(acyc);
            }
        } else {
            int acyc=cyc.abp(a),bcyc=cyc.abp(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(cyc.abp(i)==i)
        for(auto[j,k]:adj[i]) if(cyc.abp(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 5069 ms 4700 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5094 ms 4696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5026 ms 4696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5051 ms 4956 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5066 ms 5468 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5024 ms 6744 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5035 ms 6736 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5066 ms 7252 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5006 ms 7260 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5029 ms 7248 KB Time limit exceeded
2 Halted 0 ms 0 KB -