比赛 果蝇王邀请赛div1 评测结果 TWTTTTTTTT
题目名称 饭团 最终得分 0
用户昵称 运行时间 19.755 s
代码语言 C++ 内存使用 10.96 MiB
提交时间 2026-08-27 12:58:41
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX (int)(1e18)

const int N=1e5+10;

int n,idx;
int head[N],nxt[N<<1],ver[N<<1];

inline int read(){
    int t=0,f=1;
    register char c=getchar();
    while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
    while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
    return t*f;
}

void add(int u,int v){
    nxt[++idx]=head[u];
    head[u]=idx;
    ver[idx]=v;
}

struct Subtask1{
    int siz[N];
    vector<int> g[N];
    
    void update(int u,int v,bool f){
        if(!f) cout<<"-";
        else cout<<"+"<<u;
        for(int i=head[u];i;i=nxt[i]){
            int dao=ver[i];
            if(dao==v) continue;
            update(dao,u,f);
        }
    }
    
    void dfs(int u,int v){
        cout<<"="<<u<<"+"<<u;
        for(int i=head[u];i;i=nxt[i]){
            if(ver[i]==v) continue;
            g[u].push_back(ver[i]);
        }
        for(int i=1;i<g[u].size();i++) update(g[u][i],u,1);
        for(int i=0;i<g[u].size();i++){
            dfs(g[u][i],u);
            if(i!=g[u].size()-1){
                for(int j=0;j<=i+1;j++) update(g[u][j],u,0);
                for(int j=0;j<=i;j++) update(g[u][j],u,1);
            }
        }
    }
    
    void solve(){
        dfs(1,0);cout<<"!\n";
    }
}Sub1;

struct Subtask2{
    #define mid (l+r>>1)

    void Solve(int l,int r){
        if(l==r){cout<<"="<<l;return;}
        for(int i=mid+1;i<=r;i++) cout<<"+"<<i;
        Solve(l,mid);
        for(int i=mid+1;i<=r;i++) cout<<"-";
        for(int i=l;i<=mid;i++) cout<<"+"<<i;
        Solve(mid+1,r);
        for(int i=mid+1;i<=r;i++) cout<<"-";
    }
    
    #undef mid
    
    void solve(){
        cout<<"=1";
        Solve(2,n);cout<<"!\n";
    }
}Sub2;

void solve(){
    n=read();
    bool flag=false;
    for(int i=1;i<n;i++){
        int u=read(),v=read();
        add(u,v),add(v,u);
        if(u!=1&&v!=1) flag=true;
    }
    if(!flag) Sub2.solve();
    else Sub1.solve();
    
    idx=0;
    for(int i=1;i<=n;i++) head[i]=0;
}

signed main(){
    freopen("riceball.in","r",stdin);
    freopen("riceball.out","w",stdout);
    int T=read();
    while(T--) solve();
    return 0;
}