1521D 这题,样例 MLE,之前没碰到过这种情况,求神仙解答 /wq
谢谢谢谢您 /cy
#include<bits/stdc++.h>
typedef long long ll;
ll sf(){ll x=0,f=1;char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;for(;c>='0'&&c<='9';c=getchar())x=(x<<3)+(x<<1)+(c^'0');return ~f?x:-x;}
template<typename T>void pf(T x,char l='\n'){static T s[100],t;if(x<0)putchar('-'),x=-x;do s[++t]=x%10,x/=10;while(x);while(t)putchar(s[t--]^'0');putchar(l);}
int T,n,deg[100010],vis[100010];
std::set<int> G[100010];
std::vector<std::pair<int,int>> ans,sna;
std::pair<int,int> u(int x,int y){return std::make_pair(x,y);}
void del(int x,int y){if(G[x].find(y)!=G[x].end()) G[x].erase(G[x].find(y));}
void pre(int now,int las)
{
for(int to:G[now]) if(to^las) pre(to,now),++deg[now];
puts("nmls");
if(deg[now]<=1) ;
else if(deg[now]==2) del(now,las),del(las,now),ans.emplace_back(u(now,las));
else
{
del(now,las);
del(las,now);
ans.emplace_back(u(now,las));
int cur=0;
for(int to:G[now])
{
if(cur>=int(G[now].size())-2) break;
if(to^las) del(to,now),del(now,to),ans.emplace_back(u(to,now)),++cur;
}
}
}
void get(int now,int las)
{
vis[now]=1;
for(int to:G[now]) if(to^las) get(to,now),++deg[now];
if(deg[now]==1 && !sna.back().first) sna.back().first=now;
else if(deg[now]==1) sna.back().second=now;
}
int main()
{
for(T=sf();T;--T)
{
n=sf();
for(int i=1,x,y;i<n;++i) x=sf(),y=sf(),G[x].emplace(y),G[y].emplace(x);
pre(1,0);
for(int i=1;i<=n;++i) deg[i]=0;
for(int i=1;i<=n;++i) if(!vis[i]) sna.emplace_back(u(0,0)),get(i,0);
for(int i=0;i<int(ans.size());++i) pf(ans[i].first,' '),pf(ans[i].second,' '),pf(sna[i].first,' '),pf(sna[i].second,'\n');
ans.clear();
for(int i=1;i<=n;++i) ans.clear(),deg[i]=vis[i]=0;
}
return 0;
}