比赛 EYOI与SBOI开学欢乐赛5th 评测结果 AAAAA
题目名称 最优连通子集 最终得分 100
用户昵称 nick 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-16 20:01:05
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct node{int to,next;}t[2005];
  4. int n,i,j,cnt,ans=0x80000000;
  5. int x[1005],y[1005],head[1005],dp[1005];
  6. inline void add(int a,int b)
  7. {
  8. t[++cnt].to=b;
  9. t[cnt].next=head[a];
  10. head[a]=cnt;
  11. }
  12. inline void dfs(int u,int fa)
  13. {
  14. for(int i=head[u];i;i=t[i].next)
  15. if(t[i].to!=fa)
  16. {
  17. dfs(t[i].to,u);
  18. if(dp[t[i].to]>0)
  19. dp[u]=dp[u]+dp[t[i].to];
  20. }
  21. return;
  22. }
  23. int main()
  24. {
  25. freopen("subset.in","r",stdin);
  26. freopen("subset.out","w",stdout);
  27. cin>>n;
  28. memset(head,0,sizeof(head));
  29. for(i=1;i<=n;i++)
  30. cin>>x[i]>>y[i]>>dp[i];
  31. for(i=1;i<n;i++)
  32. for(j=i+1;j<=n;j++)
  33. if(abs(x[i]-x[j])+abs(y[i]-y[j])==1)
  34. add(i,j),add(j,i);
  35. dfs(1,0);
  36. for(i=1;i<=n;i++)
  37. ans=max(ans,dp[i]);
  38. cout<<ans<<endl;
  39. return 0;
  40. }