求助,本地AC,提交RE
查看原帖
求助,本地AC,提交RE
228843
wangjinbo楼主2020/8/29 19:00

RT,第一个点本地和在线IDE都能过,交上去RE

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+10;
int n,m;
struct edge{
	int next,to,dis;
}a[maxn<<1];
int head[maxn],cnt;
void add(int x,int y,int z)
{
	a[++cnt].next=head[x];
	a[cnt].to=y;
	a[cnt].dis=z;
    head[x]=cnt;
}
struct point{
	int dis,b;
}p[maxn];
bool cmp(point x,point y){return x.dis<y.dis;}
bool vis[maxn];
int size[maxn];
void dfs_size(int now,int fa)
{
	size[now]=1;
	for(int i=head[now];i;i=a[i].next)
	{
		int u=a[i].to;
		if(u==fa||vis[u])continue;
		dfs_size(u,now);
		size[now]+=size[u];
	}
}
int G;
void dfs_G(int now,int fa,int top)
{
    bool flag=false;
	for(int i=head[now];i;i=a[i].next)
	{
		int u=a[i].to;
		if(u==fa||vis[u])continue;
		if(size[u]>size[top]/2)flag=true;
		dfs_G(u,now,top);
	}	
	if(!flag&&size[now]>size[top]/2)G=now;
}
void dfs_dis(int now,int fa,int top)
{
	for(int i=head[now];i;i=a[i].next)
	{
		int u=a[i].to;
		if(u==fa||vis[u])continue;
		p[u].dis=p[now].dis+a[i].dis;
		p[u].b=top;
		dfs_dis(u,now,top);
	}
}
bool solve(int root,int k){
	memset(size,0,sizeof(size));
	memset(p,0,sizeof(p));
	dfs_size(root,0);
	dfs_G(root,0,root);
	root=G;
	vis[root]=1;
	for(int i=head[root];i;i=a[i].next){
		int u=a[i].to;
		if(vis[u])continue;
		p[u].dis=a[i].dis;
		p[u].b=u;
		dfs_dis(u,root,u);
	}
	sort(p+1,p+1+n,cmp);
	int pos1=1,pos2=n;
	while(p[pos1].dis==0)pos1++;
	for(;pos1<=n;pos1++){
		if(p[pos1].dis==k)return true;
		while(p[pos1].dis+p[pos2].dis>k&&pos2)pos2--;
		while(p[pos1].dis+p[pos2].dis==k&&pos2){
			if(p[pos1].b!=p[pos2].b)return true;
			pos2--;
		}
	}
	bool flag=false;
	for(int i=head[root];i;i=a[i].next)
	{
		int u=a[i].to;
		if(vis[u])continue;
		if(solve(u,k))flag=1;
	}
	return flag;
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<n;i++)
    {
    	int x,y,z;
    	scanf("%d %d %d",&x,&y,&z);
    	add(x,y,z);add(y,x,z);
	}
	for(int i=1;i<=m;i++)
	{
		memset(vis,0,sizeof(vis));
		int k;
		scanf("%d",&k);
		if(solve(1,k))printf("AYE\n");
		else printf("NAY\n");
	}
	return 0;
}
2020/8/29 19:00
加载中...