bzoj2152 树分治
还是太菜了,自己写的wa,但是找不到哪里错了,,
感觉现在学树分治早了点。。以后回来再看吧
/*
多少点对之间的路径是3的倍数
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#include<algorithm>
#define MAXN 20010
int N;
struct E{
int v,next,w;
}edge[MAXN<<];
int head[MAXN],tot;
int size[MAXN];
int maxv[MAXN];
int vis[MAXN];
int dis[MAXN];
int num,ans,Max,root;
void init(){
tot=ans=;
memset(head,-,sizeof head);
memset(vis,,sizeof vis);
}
void addedge(int u,int v,int w){
edge[tot].v=v;
edge[tot].w=w;
edge[tot].next=head[u];
head[u]=tot++;
}
//一次dfs处理子树的大小
void dfssize(int u,int f){
size[u]=;
maxv[u]=;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].v;
if(v==f||vis[v]) continue;
dfssize(v,u);
size[u]+=size[v];
maxv[u]=max(maxv[u],size[v]);
}
}
//一次dfs找重心
void dfsroot(int r,int u,int f){
maxv[u]=max(maxv[u],size[r]-maxv[u]);
if(maxv[u]<Max)
Max=maxv[u],root=u;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].v;
if(v==f||vis[v])
continue;
dfsroot(r,v,u);
}
}
int tmp[];
//一次dfs求路径长度
void dfsdis(int u,int d,int f){
dis[u]=d%;
tmp[dis[u]]++;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].v;
if(v==f||vis[v])
continue;
dfsdis(v,d+edge[i].w,u);
}
}
//计算以u为根的子树中有多少点对的距离%3==0
int calc(int u,int d){
tmp[]=tmp[]=tmp[]=;
dfsdis(u,d,-);//得到dis数组
return tmp[]*tmp[]+tmp[]*tmp[]*;
}
//分治
void dfs(int u){
Max=N;
dfssize(u,-);
dfsroot(u,u,-);
ans+=calc(root,);
vis[root]=;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].v;
if(vis[v])
continue;
ans-=calc(v,edge[i].w);
dfs(v);
}
} int gcd(int a,int b){
if(b==) return a;
else return gcd(b,a%b);
}
int main(){
scanf("%d",&N);
init();
for(int i=;i<=N-;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w%);
addedge(v,u,w%);
}
dfs();
int g=gcd(ans,N*N);
printf("%d/%d",ans/g,N*N/g);
return ;
}
bzoj2152 树分治的更多相关文章
- bzoj2152: 聪聪可可 树分治
sb树分治 /************************************************************** Problem: 2152 User: walfy Lang ...
- hdu-5977 Garden of Eden(树分治)
题目链接: Garden of Eden Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- 【BZOJ-1468】Tree 树分治
1468: Tree Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1025 Solved: 534[Submit][Status][Discuss] ...
- HDU 4812 D Tree 树分治+逆元处理
D Tree Problem Description There is a skyscraping tree standing on the playground of Nanjing Unive ...
- BZOJ 2152: 聪聪可可 树分治
2152: 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...
- POJ 1741 Tree 树分治
Tree Description Give a tree with n vertices,each edge has a length(positive integer less than 1 ...
- UVALive 7148 LRIP【树分治+线段树】
题意就是要求一棵树上的最长不下降序列,同时不下降序列的最小值与最大值不超过D. 做法是树分治+线段树,假设树根是x,y是其当前需要处理的子树,对于子树y,需要处理出两个数组MN,MX,MN[i]表示以 ...
- BZOJ 2566 xmastree(树分治+multiset)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2566 题意:一棵有边权的树.结点有颜色.每次修改一个点的颜色.求每次修改后所有同色 ...
- 树分治&树链剖分相关题目讨论
预备知识 树分治,树链剖分 poj1741 •一棵有n个节点的树,节点之间的边有长度.方方方想知道,有多少个点对距离不超过m 题解 点分治模板题.详见我早上写的http://www.cnblogs ...
随机推荐
- HashMap按照value排序的实现
一.实现的思想 将HashMap中的元素按照Entry<Key,Value>类型存入到LinkedList集合中. 实现自定义排序,对LinkedList集合排序. LinkedList集 ...
- nodeJS安装和环境变量的配置
推荐博客:https://www.cnblogs.com/zhouyu2017/p/6485265.html npm config list 获取npm配置信息 ------------- 主要写一下 ...
- xml/map转换器,递归设计思路【纯原】
xml/map转换器 xml转换: xml/map转换器 xml合并: xml合并 snagit图片:http://pan.baidu.com/s/1nuKJD13 git样例: https://gi ...
- 绕过/*,web.xml直接访问jsp【转】
web.xml中如果配置了/* 全匹配,那么不能用servet去响应页面返回了,因为全都被会/*拦截. <servlet> <servlet-name>validateAuth ...
- Java编程思想 学习笔记10
十.内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...
- Multi-Nim游戏结论不变证明
Nim取石子游戏结论: 若n堆石子的异或和为0,则先手必胜:否则,先手必败 加入新规则: 每次取完石子后,可以将取的那一堆的石子 分为多堆,也可以不分 结论: 同Nim取石子游戏结论 证明: 如果异或 ...
- WebSocket 实战之——【WebSocket 原理】
一.WebSocket是什么? HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算). 首先HTTP有1.1和1.0之说,也就 ...
- HashMap分析及散列的冲突处理
1,Hashing过程 像二分查找.AVL树查找,这些查找算法的时间复杂度为O(logn),而对于哈希表而言,我们一般说它的查找时间复杂度为O(1).那它是怎么实现的呢?这就是一个Hashing过程. ...
- Keil5下载STM32库
1.http://www.keil.com/dd2 2.3.以STM32L051C8为例 下载即可.
- Java导出List集合到txt文件中——(四)
有时候,需要将数据以一定格式导出到txt文件中.利用Java的IO可以轻松的导出数据到txt中. package Action.txt; import java.io.BufferedWriter; ...