下面的代码我测试是只有40pts(会RE和TLE),但是我把read函数中的两个re去掉就100了,请问为什么
附上40分测试点信息:
代码:
#include<bits/stdc++.h>
#define re register
using namespace std;
inline int read(){
re int f=1,x=0;
re char c;
while(!isdigit(c)){
if(c=='-')f=-1;
c=getchar();
}
while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
inline void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+48);
}
struct edge{
int to;
int nt;
}e[6005];
int a[6005],h[6005],n=read(),u,v,tot,dp[6005][2];
bool b[6005];
inline void add(int u,int v){e[++tot]={v,h[u]},h[u]=tot;}
inline void dfs(int x){
for(re int i=h[x];i;i=e[i].nt)dfs(e[i].to),dp[x][0]+=max(dp[e[i].to][0],dp[e[i].to][1]),dp[x][1]+=dp[e[i].to][0];
}
signed main(){
for(re int i=1;i<=n;i++)dp[i][1]=a[i]=read();
for(re int i=1;i<n;i++)u=read(),v=read(),add(v,u),b[u]=true;
for(re int i=1;i<=n;i++)if(!b[i])dfs(i),write(max(dp[i][0],dp[i][1])),exit(0);
}