标签:ide sed getchar nbsp efi put def fine include
洛谷 3806
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define N 10010 5 #define rg register 6 using namespace std; 7 int n,m,k,cnt,tot,root,dep[N],siz[N],mxsiz[N],last[N],q[110]; 8 bool v[N],have[10000010],ans[110]; 9 struct edge{ 10 int to,pre,dis; 11 }e[N<<1]; 12 inline int read(){ 13 int k=0,f=1; char c=getchar(); 14 while(c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar(); 15 while(‘0‘<=c&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar(); 16 return k*f; 17 } 18 void getroot(int x,int fa){ 19 siz[x]=1; mxsiz[x]=0; 20 for(rg int i=last[x],to;i;i=e[i].pre)if(!v[to=e[i].to]&&to!=fa){ 21 getroot(to,x); siz[x]+=siz[to]; 22 mxsiz[x]=max(mxsiz[x],siz[to]); 23 } 24 mxsiz[x]=max(mxsiz[x],cnt-mxsiz[x]); 25 if(!root||mxsiz[x]<mxsiz[root]) root=x; 26 } 27 void getdep(int x,int fa,int d){ 28 dep[tot++]=d; 29 for(rg int i=last[x],to;i;i=e[i].pre) 30 if(!v[to=e[i].to]&&to!=fa) getdep(to,x,d+e[i].dis); 31 } 32 void dfs(int x){ 33 v[x]=1; int l=tot=1; have[0]=1; 34 for(rg int i=last[x],to;i;i=e[i].pre)if(!v[to=e[i].to]){ 35 l=tot; getdep(to,x,e[i].dis); 36 for(rg int k=1;k<=m;k++){ 37 if(ans[k]) continue; 38 for(rg int j=l;j<tot;j++) 39 if(q[k]>=dep[j]) if(have[q[k]-dep[j]]) ans[k]=1; 40 } 41 for(rg int j=l;j<tot;j++) have[dep[j]]=1; 42 } 43 for(rg int i=1;i<tot;i++) have[dep[i]]=0; 44 for(rg int i=last[x],to;i;i=e[i].pre)if(!v[to=e[i].to]){ 45 root=0; cnt=siz[to]; getroot(to,x); dfs(root); 46 } 47 } 48 int main(){ 49 n=read(); m=read(); 50 for(rg int i=1;i<n;i++){ 51 int u=read(),v=read(),w=read(); 52 e[++tot]=(edge){v,last[u],w}; last[u]=tot; 53 e[++tot]=(edge){u,last[v],w}; last[v]=tot; 54 } 55 for(rg int i=1;i<=m;i++) q[i]=read(); 56 root=0; cnt=n; getroot(1,0); dfs(root); 57 for(rg int i=1;i<=m;i++) puts(ans[i]?"AYE":"NAY"); 58 return 0; 59 }
标签:ide sed getchar nbsp efi put def fine include
原文地址:https://www.cnblogs.com/DriverLao/p/8952013.html