博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【点分治】bzoj2152 聪聪可可
阅读量:6037 次
发布时间:2019-06-20

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

模板题。

#include
#include
#include
#include
using namespace std;#define MAXN 20001#define INF 2147483647typedef pair
Point;int n,K,ans,T[3];int v[MAXN<<1],w[MAXN<<1],first[MAXN],next[MAXN<<1],en;int dis[MAXN],En,last;void AddEdge(const int &U,const int &V,const int &W){ v[++en]=V; w[en]=W; next[en]=first[U]; first[U]=en;}bool centroid[MAXN];int size[MAXN];int calc_sizes(int U,int Fa){ int res=1; for(int i=first[U];i;i=next[i]) if(v[i]!=Fa&&(!centroid[v[i]])) res+=calc_sizes(v[i],U); return size[U]=res;}Point calc_centroid(int U,int Fa,int nn){ Point res=make_pair(INF,-1); int sum=1,maxv=0; for(int i=first[U];i;i=next[i]) if(v[i]!=Fa&&(!centroid[v[i]])) { res=min(res,calc_centroid(v[i],U,nn)); maxv=max(maxv,size[v[i]]); sum+=size[v[i]]; } maxv=max(maxv,nn-sum); res=min(res,make_pair(maxv,U)); return res;}void calc_dis(int U,int Fa,int d){ dis[En++]=d; for(int i=first[U];i;i=next[i]) if(v[i]!=Fa&&(!centroid[v[i]])) calc_dis(v[i],U,(d+w[i])%3);}int calc_pairs(int s){ for(int i=last;i

转载于:https://www.cnblogs.com/autsky-jadek/p/4293683.html

你可能感兴趣的文章
L304 What Is Death?
查看>>
ES6解构赋值
查看>>
Android Session
查看>>
MapReduce基本流程与设计思想初步
查看>>
Android AutoCompleteTextView和MultiAutocompleteTextView实现动态自动匹配输入的内容
查看>>
iOS - UILabel
查看>>
深入理解jvm jdk1,7(8)
查看>>
LCA UESTC 92 Journey
查看>>
论秋招中的排序(排序法汇总-------上篇)
查看>>
thymeleaf 引入js css 无效
查看>>
LEANGOO卡片
查看>>
ApacheHttpServer出现启动报错:the requested operation has failed解决办法
查看>>
eclipse上配置svn
查看>>
取distinct数据同时还取其他字段
查看>>
js 数组排除重复值(string)
查看>>
Leetcode 12 - Integer to Roman
查看>>
详细解释:nginx中ngx_http_rewrite_module模块配置及各个参数含义
查看>>
循序渐进Python3(三) -- 2 -- 内置函数
查看>>
C# CHECKEDLISTBOX控件用法总结(怎样得到多选的值)
查看>>
Python 语言中经常有疑惑的地方
查看>>