Submission #1178800

#TimeUsernameProblemLanguageResultExecution timeMemory
1178800sleepntsheepPipes (CEOI15_pipes)C11
Compilation error
0 ms0 KiB
#include<stdio.h>
#include<algorithm>
#define N 200005

int n,m,ds[N],rk[N],trash[100002],top,ii,ded[N];

int fin(int i){
    return ds[i]==i?i:(ds[i]=fin(ds[i]));
}
void unite(int i,int j){
    i=fin(i),j=fin(j);
    if(i==j)return;
    if(rk[i]==rk[j]){
	ds[j]=i;
	++rk[i];
    }
    else{
	if(rk[i]<rk[j]) std::swap(i,j);
	ds[j]=i;
    }
}

struct LCT{
    struct node{int c[2],pa,rev,eu,ev;}t[200005];
    int nrt(int v){return t[t[v].pa].c[0]==v||t[t[v].pa].c[1]==v;}
    int newnode(){
	int i=top?trash[--top]:++ii;
	ds[i]=i;rk[i]=0;
	t[i].c[0]=t[i].c[1]=t[i].pa=t[i].rev=0;
	return i;
    }
    void tagrev(int v){
	if(v){
	    std::swap(t[v].c[0],t[v].c[1]);
	    t[v].rev^=1;
	}
    }
    void pushdown(int v){
	if(t[v].rev){
	    tagrev(t[v].c[0]),tagrev(t[v].c[1]);
	    t[v].rev=0;
	}
    }
    void rot(int v){
	int p=t[v].pa,g=t[p].pa,d=t[p].c[1]==v;
	if(nrt(p))t[g].c[t[g].c[1]==p]=v;
	t[p].c[d]=t[v].c[!d];
	if(t[v].c[!d])t[t[v].c[!d]].pa=p;
	t[v].c[!d]=p;
	t[t[p].pa=v].pa=g;
    }
    void upd(int v){if(nrt(v))upd(t[v].pa);pushdown(v);}
    void splay(int v){
	upd(v);
	for(int p,g;nrt(v);rot(v)){
	    g=t[p=t[v].pa].pa;
	    if(nrt(p))rot((t[p].c[1]==v)==(t[g].c[1]==p)?p:v);
	}
    }
    void access(int v){
	for(int w=0;v;v=t[w=v].pa=fin(t[v].pa))
	    splay(v),
		t[v].c[1]=w;
    }
    void evert(int v){
	access(v);splay(v);tagrev(v);
    }
    int frt(int v){
	access(v);splay(v);
	while(t[v].c[0])v=t[v].c[0];
	splay(v);return v;
    }
    void link(int v,int w){
	evert(v);access(w);splay(w);t[v].pa=w;
    }
    void dfs(int v,int rt){
	if(!v)return;
	if(v<=n)
	    unite(rt,v);
	else{
	    ded[v]=1,trash[top++]=v;
	}
	dfs(t[v].c[0],rt);
	dfs(t[v].c[1],rt);
	t[v].c[0]=t[v].c[1]=0;
    }
}lc;

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)ds[i]=i;
    ii=n;
    for(int u,v,i=0;i<m;++i){
	scanf("%d%d",&u,&v);
	if(fin(u)==fin(v))continue;
	if(lc.frt(u)==lc.frt(v)){
	    lc.evert(u);
	    lc.access(v);
	    lc.splay(v);
	    lc.dfs(v,v);
	}else{
	    int j=lc.newnode();
	    lc.t[j].eu=u,lc.t[j].ev=v;
	    ded[j]=0;
	    lc.link(u,j);
	    lc.link(j,v);
	}
    }
    for(int i=n+1;i<=ii;++i){
	if(!ded[i]){
	    printf("%d %d\n",lc.t[i].eu,lc.t[i].ev);
	}
    }

    return 0;
}

Compilation message (stderr)

pipes.c:2:9: fatal error: algorithm: No such file or directory
    2 | #include<algorithm>
      |         ^~~~~~~~~~~
compilation terminated.