WA on test 8求助
  • 板块CF1491E Fib-tree
  • 楼主cmll02
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/12/11 10:03
  • 上次更新2023/11/3 22:31:48
查看原帖
WA on test 8求助
171487
cmll02楼主2021/12/11 10:03

/fn/ll

换了114514个写法,全都一样/fn

思路是找到可行的就删

arr fib,ifib,sz,faa,t,tag;
#undef fe
#define fe(x) for(auto v:G[x]){
std::set<int>G[200005];
void a1ddedge(int u,int v,int w)
{
	G[u].insert(v);
	G[v].insert(u);
}
int cc,Cc,n;
void dfs(int u,int fa)
{
	t[++Cc]=u;
	sz[u]=1;
	fe(u)
	if(v==fa)continue;
	dfs(v,u);sz[u]+=sz[v];faa[v]=u;
	gr
}
void dfs2(int u,int fa)
{
	fe(u)
	if(v==fa)continue;
	dfs2(v,u);
	gr
	tag[u]=cc;
}
void rmv(int u,int v)
{
	G[u].erase(v);
	G[v].erase(u);
}
void solve(int x,int d)
{
	// odp(x,d);
	if(d==-1)
	{
		puts("NO");
		exit(0);
	}
	if(d<=1)return;
	// if(d==0)
	// {
		// puts("NO");
		// exit(0);
	// }
	Cc=0;
	dfs(x,x);
	rg(Cc)
	if(sz[t[i]]==fib[d-2])
	{
		rmv(t[i],faa[t[i]]);
		solve(t[i],d-2);
		solve(faa[t[i]],d-1);
		return;
	}
	if(sz[t[i]]==fib[d-1])
	{
		rmv(t[i],faa[t[i]]);
		solve(t[i],d-1);
		solve(faa[t[i]],d-2);
		return;
	}
	gr
	puts("NO");
	// if(n==fib[25])printf("no on %d %d.\n",x,d);
	exit(0);
}
signed main()
{
	n=read();rg(n-1)int u=read(),v=read();a1ddedge(u,v,1),a1ddedge(v,u,1);gr
	fib[0]=fib[1]=1;
	memset(ifib,-1,sizeof(ifib));
	rg(26)if(i>1)fib[i]=fib[i-1]+fib[i-2];gr
	rg(26)ifib[fib[i]]=i;gr
	// odl(fib[25]);
	// tag[1]=cc=1;
	solve(1,ifib[n]);
	puts("YES");
	return 0;
}
2021/12/11 10:03
加载中...