点分治WA #4求助
查看原帖
点分治WA #4求助
876598
mskqwq楼主2024/3/20 16:44

rt,有一个答案存在但没找到,貌似和这个错误一样

#include <bits/stdc++.h>
#define MISAKA main
#define ll long long
using namespace std;
inline int read(){
	char ch=getchar();int f=1,x=0;
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*f;
}
const double eps=1e-9;
const int N=1e4+10,inf=1e9,mod=998244353;
bitset<N*N> b;vector<int> d;
int siz[N],vis[N],dep[N],rt,mn,n,m,k[N],ans[N];
struct edge{int to,next,w;}e[N<<1];
int head[N],ecnt=1;
void add_edge(int u,int v,int w){
	e[++ecnt].to=v;
	e[ecnt].w=w;
	e[ecnt].next=head[u];
	head[u]=ecnt;
}
int getsiz(int u,int fa){
	int s=1;
	for(int i=head[u];i;i=e[i].next){
		int v=e[i].to;
		if(v!=fa&&!vis[v]) s+=getsiz(v,u);
	}
	return s;
}
void getrt(int u,int fa,int s){
	siz[u]=1;int mx=0;
	for(int i=head[u];i;i=e[i].next){
		int v=e[i].to;
		if(vis[v]||v==fa) continue;
		getrt(v,u,s),siz[u]+=siz[v];
		mx=max(mx,siz[v]);
	}
	mx=max(mx,s-siz[u]);
	if(mx<mn) mn=mx,rt=u;
}
void getdep(int u,int fa){
	d.push_back(dep[u]); 
	for(int i=head[u];i;i=e[i].next){
		int v=e[i].to;
		if(v!=fa&&!vis[v])
			dep[v]=dep[u]+e[i].w,getdep(v,u);
	}
}
void solve(int u,int fa){
	int s=getsiz(u,fa),p=0;
	mn=inf,rt=0;getrt(u,fa,s);
	vis[rt]=1,dep[rt]=0,b[0]=1;
	for(int i=head[rt];i;i=e[i].next){
		int v=e[i].to;
		if(v==fa||vis[v]) continue;
		dep[v]=e[i].w,getdep(v,u);
		for(int j=p;j<d.size();j++)
			for(int q=1;q<=m;q++)
				if(k[q]>=d[j]) ans[q]|=b[k[q]-d[j]];
		for(int j=p;j<d.size();j++) b[d[j]]=1;
		p=d.size();
	}
	for(int i=0;i<d.size();i++) b[d[i]]=0;
	d.clear();
	for(int i=head[rt];i;i=e[i].next){
		int v=e[i].to;
		if(v!=fa&&!vis[v]) solve(v,rt);
	}
}
signed MISAKA(){
	n=read(),m=read();
	for(int i=1;i<n;i++){
		int u=read(),v=read(),w=read();
		add_edge(u,v,w);
		add_edge(v,u,w); 
	}
	for(int i=1;i<=m;i++) k[i]=read();
	solve(1,0);
	for(int i=1;i<=m;i++) printf("%s\n",ans[i]?"AYE":"NAY");
	return 0;
}
/*
6 10
1 2 2
2 3 3
1 4 5
4 5 1
4 6 2
1 2 3 4 5 6 7 8 9 10
*/

2024/3/20 16:44
加载中...