求助 MLE
  • 板块学术版
  • 楼主_stardust_
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/5/14 20:30
  • 上次更新2023/11/4 23:16:53
查看原帖
求助 MLE
344409
_stardust_楼主2021/5/14 20:30

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;
}
2021/5/14 20:30
加载中...