关于register(加了register就RE或TLE)
查看原帖
关于register(加了register就RE或TLE)
452621
GoldenBeach楼主2022/8/18 00:31

下面的代码我测试是只有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);
}
2022/8/18 00:31
加载中...