比赛 2026.4.11 评测结果 AAAAEEEAAEAAAAAAAEAAAEEEEEEEEAEEEEEAAAAAAAAAAAAAAAEAAAE
题目名称 最终得分 64
用户昵称 李金泽 运行时间 5.503 s
代码语言 C++ 内存使用 6.93 MiB
提交时间 2026-04-11 09:13:18
显示代码纯文本
#include "gra.h"
#define N 1005
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define rf(i,r,l) for(int i=r;i>=l;i--)
int f1[N],f2[N],cnt1,cnt2;
int fd1(int x){return x^f1[x]?f1[x]=fd1(f1[x]):x;}
int fd2(int x){return x^f2[x]?f2[x]=fd2(f2[x]):x;}
void mg1(int x,int y){f1[fd1(x)]=y;}
void mg2(int x,int y){f2[fd2(x)]=y;}
struct edge{int u,v;}e1[N],e2[N];
void tree(int n) {
    fo(i,1,n)f1[i]=f2[i]=i;
    fo(i,2,n){
        bool c=query(i,i-1);
        if(!c)f1[i]=i-1,e1[++cnt1]={i,i-1};
        else f2[i]=i-1,e2[++cnt2]={i,i-1};
        int now;
        if(fd1(i-1)==1)now=fd2(i)-1;
        else now=fd1(i)-1;
        while(fd1(i)!=1&&fd2(i)!=1){
            c=query(now,i);
            if(!c)f1[fd1(i)]=now,e1[++cnt1]={now,i},now=fd1(now)-1;
            else f2[fd2(i)]=now,e2[++cnt2]={now,i},now=fd2(now)-1;
        }
    }
    if(fd1(n)==1)
        fo(i,1,cnt1)
            report(e1[i].u,e1[i].v);
    else
        fo(i,1,cnt2)
            report(e2[i].u,e2[i].v);
}