bzoj2152
发布日期:2021-10-24 14:20:35 浏览次数:5 分类:技术文章

本文共 1002 字,大约阅读时间需要 3 分钟。

题解:

  随便点分治,用一个t数组,t[i]代表有u到root的值mod3==i; 那么答案就是:t[0]*t[0]+t[1]*t[2]*2;

代码:

  

#include
#include
#include
#include
#define N 20005using namespace std;int pre[N*2],now[N],v[N*2],val[N*2];int d[N],son[N],f[N];int t[4];bool vis[N];int tot,all,n,ans,root;int read(){ int x=0; char ch; bool bo=0; while (ch=getchar(), ch<'0'||ch>'9') if (ch=='-') bo=1; while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); if (bo) return -x; return x; }void ins(int a,int b,int c){ ++tot; pre[tot]=now[a]; now[a]=tot; v[tot]=b; val[tot]=c;}int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}void getroot(int u,int fa){ son[u]=1; f[u]=0; for (int p=now[u]; p; p=pre[p]) { int vv=v[p]; if (vv==fa || vis[vv]) continue; getroot(vv,u); son[u]+=son[vv]; f[u]=max(f[u],son[vv]); } f[u]=max(f[u],all-son[u]); if (f[u]
View Code

 

转载于:https://www.cnblogs.com/HQHQ/p/5469102.html

转载地址:https://blog.csdn.net/weixin_30791095/article/details/97971917 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:20145322《Java程序设计》第十周学习总结
下一篇:springmvc 获取request response

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月12日 01时53分01秒