提交时间:2025-01-08 14:37:46
运行 ID: 35885
#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define inx(u) int I=h[(u)],v=edge[I].v;I;I=h[(u)],v=edge[I].v int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=800010,N=100,P=10000; struct Edge{int v,nx;pii w;}edge[MAXN<<1];int h[MAXN],CNT=1;void add_side(int u,int v,pii w){ edge[++CNT]={v,h[u],w};h[u]=CNT;edge[++CNT]={u,h[v],w};h[v]=CNT;} int n,q,a[MAXN],cnt,us[MAXN]; pii p[MAXN],w; void dfs(int u){ for(inx(u)){ h[u]=edge[I].nx; if(us[I>>1])continue; us[I>>1]=1; dfs(v); w=edge[I].w; p[++cnt]=w; } } void slv(){ n=read(); for(int i=1;i<=n<<2;i++)a[i]=read(); for(int i=1;i<=n<<1;i++)add_side(a[(n<<1)-i+1],a[(n<<1)+i],mk((n<<1)-i+1,(n<<1)+i)); for(int i=1;i<=n;i++)dfs(i); for(int i=1;i<=cnt;i+=2)printf("%lld %lld ",p[i].fr,p[i].sc); } signed main(){ //freopen("gem4.in","r",stdin);freopen("gem.out","w",stdout); slv(); return 0; }