2018.07.20 bzoj2152: 聪聪可可(点分治)
传送门
本蒟蒻AC的第二道点分治,调了30min" role="presentation" style="position: relative;">30min30min发现自己把gcd" role="presentation" style="position: relative;">gcdgcd写错了。
这题是一个点分治裸板,记录整颗子树中到根的距离模3" role="presentation" style="position: relative;">33的情况,容斥一下扣去多算的部分就行了。
代码如下:
#include<bits/stdc++.h>
#define N 20005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
return ans;
}
int n,tot,first[N],siz[N],msiz[N],d[N],cnt[3],sum,rt,ans=0;
bool vis[N];
struct Node{int w,v,next;}e[N<<1];
inline void add(int u,int v,int w){e[++tot].v=v,e[tot].w=w,e[tot].next=first[u],first[u]=tot;}
inline void getroot(int p,int fa){
siz[p]=1,msiz[p]=0;
for(int i=first[p];i;i=e[i].next){
int v=e[i].v;
if(v==fa||vis[v])continue;
getroot(v,p),siz[p]+=siz[v];
if(siz[v]>msiz[p])msiz[p]=siz[v];
}
msiz[p]=max(msiz[p],sum-siz[p]);
if(msiz[p]<msiz[rt])rt=p;
}
inline void getdis(int p,int fa){
++cnt[d[p]];
for(int i=first[p];i;i=e[i].next){
int v=e[i].v;
if(v==fa||vis[v])continue;
d[v]=(d[p]+e[i].w)%3,getdis(v,p);
}
}
inline int calc(int p,int v){
cnt[0]=cnt[1]=cnt[2]=0,d[p]=v,getdis(p,0);
return cnt[0]*cnt[0]+cnt[1]*cnt[2]*2;
}
inline void solve(int p){
ans+=calc(p,0);
vis[p]=true;
for(int i=first[p];i;i=e[i].next){
int v=e[i].v;
if(vis[v])continue;
ans-=calc(v,e[i].w);
rt=0,sum=siz[v];
getroot(v,0);
solve(rt);
}
}
inline int gcd(int a,int b){while(b){int t=a;a=b,b=t%a;}return a;}
int main(){
memset(vis,false,sizeof(vis));
n=read();
for(int i=1;i<n;++i){
int u=read(),v=read(),w=read()%3;
add(u,v,w),add(v,u,w);
}
rt=0,msiz[0]=sum=n,getroot(1,0),solve(rt);
int g=gcd(ans,n*n);
printf("%d/%d",ans/g,n*n/g);
return 0;
}
2018.07.20 bzoj2152: 聪聪可可(点分治)的更多相关文章
- [bzoj2152][聪聪和可可] (点分治+概率)
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
- 2018.07.20 洛谷P4178 Tree(点分治)
传送门 又一道点分治. 直接维护子树内到根的所有路径长度,然后排序+双指针统计答案. 代码如下: #include<bits/stdc++.h> #define N 40005 using ...
- 2018.07.20 bzoj1614: Telephone Lines架设电话线(二分+最短路)
传送门 这题直接做显然gg" role="presentation" style="position: relative;">gggg,看这数据 ...
- 2018.07.20 bzoj3211: 花神游历各国(线段树)
传送门 维护区间开方,区间求和.这个是线段树常规操作. 显然一个数被开方若干次之后要么是1,要么是0,所以用线段树维护区间最大和区间和,如果区间最大不超过1就剪枝剪掉,不然就继续递归直到叶节点时停下进 ...
- 2018.07.20 atcoder Largest Smallest Cyclic Shift(贪心)
传送门 题意:给你x个a,y个b,z个c,显然这些字符可以拼成若干字符串,然后求这些字符串中最小表示法表示出来的最大的那一个. 解法:贪心思想,用multiset维护现在拼成的字串,每次取一个最小的和 ...
- 【BZOJ2152】聪聪可可(点分治)
[BZOJ2152]聪聪可可(点分治) 题面 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电 ...
- BZOJ2152 [国家集训队] 聪聪可可 [点分治]
题目传送门 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 5237 Solved: 2750[Submit][Status][Discuss ...
- BZOJ2152 聪聪可可 【点分治】
BZOJ2152 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问 ...
- 【bzoj2152】【聪聪可可】【点分治】
[问题描写叙述] 聪聪和可但是兄弟俩.他们俩常常为了一些琐事打起来,比如家中仅仅剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(但是他们家仅仅有一台电脑)--遇到这样的问题,普通情况下石头剪刀布就好 ...
随机推荐
- sts安装出现could not find jar:file解决办法
转自:https://blog.csdn.net/weixin_43702329/article/details/84823912 标题sts插件下载好但是安装出错 我的eclipse是4.5.2,在 ...
- 不丢失log的情况下迁移git空间
背景: 原来的源码都放在个人的空间下,为了团队后续规范管理,建立了一个团队使用的空间,需要把旧空间的文件和提交记录,一起迁移. 方法:git remote 进行空间切换 1.查看当前空间名:git r ...
- discuz 修改积分策略( 在周期中添加"每周" )
在 source/admincp/admincp_credits.php 文件中, ctrl+f 搜索 $lang['setting_credits_policy_cycletype_1'] 处, ...
- mime设置
ie9对mime有特殊要求,必须要有type才可以. 如果出现css的mime类型不支持.则没有加 type="css/text" 查看本机的mime支持: regedit > ...
- python 之编写登陆接口
基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程序尝试登录时, ...
- .NET MVC 两种视图引擎(Razor、Aspx)
ASPX 优点: 通过上面小小的对比,不难看出,与ASP.NET MVC紧密集成,对于以往ASP.NET开发人员有更好体验.其实它还有其他几优点: ●智能感应 ...
- LESS CSS 实例
值得参考的 10 个 LESS CSS 实例 2 收藏(185) LESS, Sass 和其他 CSS 预处理器是一种超棒的方法用来扩展 CSS 功能,使之更适合程序员.你可以使用变量.函数.混合 ...
- 【354】Numpy 相关函数应用
numpy中的ndarray方法和属性 - bonelee - 博客园 numpy.ndarray — NumPy v1.15 Manual 属性: T:转置,同 transpose() flat:转 ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks
视频地址:https://www.cctalk.com/v/15114923888328 视图 Nunjucks 彩虹是上帝和人类立的约,上帝不会再用洪水灭人. 客户端和服务端之间相互通信,传递的数据 ...
- Numpy统计
Numpy统计 axis=None 是统计函数的标配参数,默认不输入此参数则为对数组每一个元素进行计算,设定轴则对此轴上元素进行计算 1:常用统计函数 .sum(a,axis=None):数组a求和运 ...