博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj2152]聪聪可可
阅读量:5283 次
发布时间:2019-06-14

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

poj1741一样,只是将统计每一个点的深度改为深度除以3余数为012的点数量,注意(1,2)(2,1)算两种。

1 #include
2 #include
3 #include
4 using namespace std; 5 #define N 20005 6 struct ji{ 7 int nex,to,len; 8 }edge[N<<1]; 9 int E,r,n,x,y,z,ans,a[11],head[N],vis[N],sz[N];10 int gcd(int x,int y){11 if (!y)return x;12 return gcd(y,x%y);13 }14 void add(int x,int y,int z){15 edge[E].nex=head[x];16 edge[E].to=y;17 edge[E].len=z;18 head[x]=E++;19 }20 void tot(int k,int fa,int sh){21 a[sh]++;22 for(int i=head[k];i!=-1;i=edge[i].nex)23 if ((!vis[edge[i].to])&&(edge[i].to!=fa))24 tot(edge[i].to,k,(sh+edge[i].len)%3);25 }26 int calc(int k,int p){27 memset(a,0,sizeof(a));28 tot(k,0,p);29 return a[0]*a[0]+2*a[1]*a[2];30 }31 void get(int k,int fa){32 int ma=0;33 sz[k]=1;34 for(int i=head[k];i!=-1;i=edge[i].nex)35 if ((!vis[edge[i].to])&&(edge[i].to!=fa)){36 get(edge[i].to,k);37 sz[k]+=sz[edge[i].to];38 ma=max(ma,sz[edge[i].to]);39 }40 ma=max(ma,sz[0]-sz[k]);41 if (ma<=sz[0]/2)r=k;42 }43 void dfs(int k){44 ans+=calc(k,0);45 vis[k]=1;46 get(k,0);47 for(int i=head[k];i!=-1;i=edge[i].nex)48 if (!vis[edge[i].to]){49 ans-=calc(edge[i].to,edge[i].len);50 sz[0]=sz[edge[i].to];51 get(edge[i].to,0);52 dfs(r);53 }54 }55 int main(){56 scanf("%d",&n);57 memset(head,-1,sizeof(head));58 for(int i=1;i
View Code

 

转载于:https://www.cnblogs.com/PYWBKTDA/p/11249647.html

你可能感兴趣的文章
hihocoder--1384 -- Genius ACM (倍增 归并)
查看>>
网络字节序和主机字节序转换-------- “可交换操作”
查看>>
Python教程[廖雪峰],主要是实践
查看>>
python记录_day03 字符串
查看>>
MarkDown测试
查看>>
私有属性和私有方法
查看>>
java.util.regx Demo
查看>>
react-fetch数据发送请求
查看>>
C#中的多线程使用 -- Thread 类详解(转)
查看>>
Devices下设备的进程显示为问号的问题
查看>>
遍历文件夹的方法
查看>>
网络协议分析软件
查看>>
wpf的VisualStateManager
查看>>
leetcode 383. 赎金信(Ransom Note)
查看>>
Mysql联合查询UNION和UNION ALL的使用介绍
查看>>
node js学习(二)——REPL(交互式解释器)
查看>>
NMON记录服务器各项性能数据
查看>>
Xitrum学习笔记05 - 模板引擎
查看>>
JavaBase 变量,数据类型和运算符
查看>>
Android Audio Focus的应用(requestAudioFocus)
查看>>