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 ...
随机推荐
- Meavn项目中log4j的使用
两个步骤: 1.在pom.xml中添加: <dependency> <groupId>log4j</groupId> <artifactId>log4j ...
- MYCAT扩容
一.原架构图: 二.扩容 在HOST1上新增节点db_user2 在HOST2上新增节点db_user2 三.操作步骤 1.mycat 所在环境安装 mysql 客户端程序 2.mycat 的 lib ...
- powerdesigner中反向postgresql
一.下载驱动 https://jdbc.postgresql.org/download.html 在cmd中查看本机jdk的版本,然后再到上面的网页中下载对应的jar 二.设置环境变量 JAVA_HO ...
- H5 localStorage sessionStorage
localStorage 用于长久保存整个网站的数据,没有过期时间,除非手动去除. sessionStorage 会话存储,临时存储,当用户关闭浏览器窗口后,数据被删除. 共同方法 以 localSt ...
- scala面向对象.高阶函数,柯里化,Actor编程简介
1.定义一个类 class Person{ //用val修饰的变量是只读属性,有getter但是没有setter val id ="111" //用var修饰的变量既有getter ...
- Shell编程(一)概览
1. Shell功能 1. 自动化批量系统初始化程序(update.软件安装.时区设置.安全策略.......) 2. 自动化批量软件部署程序(LAMP.LNMP.Tomcat.LVS.Nginx) ...
- Winform程序双向绑定
程序比较简单,一看就明白,主要需要实现INotifyPropertyChanged using System; using System.Collections.Generic; using Syst ...
- 无线DOS攻击
1.无线连接状态 IEEE 802.11定义了一种客户端状态机制,用于跟踪工作站身份验证和关联状态.无线客户端和AP基于IEEE标准实现这种状态机制.成功关联的客户站停留在状态3,才能进行无线通信.处 ...
- js 运动框架及实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 实用技能之Python打包制作成EXE可执行程序
制作环境:Andconda3,python3.6 一.安装pyInstaller 方式一): 在命令行输入:pip install pyinstaller 方式二): ① 下载pyInstalle ...