又是WA又是RE,蒟蒻卑微求助

P1122 最大子树和

两点问题: 第一个 您的数组开小了; 开4e4就足够了 因为您连得是双向边 第二:您cnt声明的位置不对,太靠下了 AC代码: ```cpp #include<iostream> #include<string.h> using namespace std; //Á´Ê½Ç°ÏòÐÇ struct Edge{ int to,next; }; Edge edge[160100]; int head[160100]; int cnt=0; void add(int u,int v){//¼Ó±ß edge[cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt++; } int n;//½Úµã¸öÊý int nums[160100];//ÿ¸ö½ÚµãµÄȨÖØ int dp[160100];//dp[i]:´æ·Å iΪ¸ùµÄÁªÍ¨Çø×î´óÖµ //±ßµÄÌõÊý bool visit[160100];//±ÜÃâdfsµÄʱºòÖظ´±éÀú£¬Ôì³ÉËÀÑ­»· int ans=-2147483647; void dfs(int root){//±éÀú if(head[root]==-1) dp[root]=nums[root]; else{ visit[root]=true; dp[root]=nums[root]; for(int i=head[root];i!=-1;i=edge[i].next){ if(visit[edge[i].to]==true) continue; else{ dfs(edge[i].to); dp[root]+=max(0,dp[edge[i].to]); } } ans=max(ans,dp[root]); } } int main(){ memset(head,-1,sizeof(head)); memset(visit,false,sizeof(visit)); cin>>n; for(int i=1;i<=n;i++) cin>>nums[i]; int l,k; for(int i=1;i<n;i++){ cin>>l>>k; add(l,k); add(k,l);//Ë«ÖØ¼Ó±ß } dfs(1); cout<<ans; return 0; } ```
by LawrenceSivan @ 2021-03-22 15:47:30


|