| 比赛 |
果蝇王邀请赛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;
}