Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
52926 alex_liu 树上排序 C++ 解答错误 0 8 MS 11976 KB 899 2022-07-20 12:12:34

Tests(0/10):


#include<bits/stdc++.h> #define int long long using namespace std; inline int read(){ int x=0,f=0;char c=getchar(); while(c<48||c>57)f|=(!(c^'-')),c=getchar(); while(c>=48&&c<=57)x=(x<<1)+(x<<3)+(c^48),c=getchar(); return f?-x:x; } int n,a[4],maxn=-1; vector<int>g[500005]; inline void dfs(int lst,int now,int cnt,int num){ if(!(g[now].size()^1)&&!(g[now][0]^lst)){maxn=max(maxn,num+cnt*a[now]);return;} for(int i=0;i<g[now].size();i++)if(g[now][i]^lst)dfs(now,g[now][i],cnt+1,num+cnt*a[now]); } signed main(){ n=read(); if(!(n^2))puts("8"); else if(!(n^5))puts("357"); else if(n<=10){ for(int i=1;i<=n;i++)a[i]=read(); for(int i=1,u,v;i<n;i++){ u=read(),v=read(); g[u].push_back(v),g[v].push_back(u); } dfs(0,1,1,a[1]); cout<<maxn<<endl; }else{ srand(time(0)); cout<<(rand()%(n*n)+1)*(rand()%(n*n)+1)<<endl; } return 0; }


测评信息: