当前位置: 首页 > news >正文

亳州市网站建设_网站建设公司_关键词排名_seo优化

jsp网站怎么做邮箱验证码,东莞企业公司网站建设,西安公司注册核名,深圳网站设计 制作题目 这真是一道神仙的一批的题目 定义\(s(i,j)\)表示从点\(i\)到点\(j\)经过的颜色数量 设 \[sum_i\sum_{j1}^ns(i,j)\] 求出所有的\(sum_i\) 考虑点分治 对于一个点我们用两种方式来统计其答案 这个点作为分治重心时#xff0c;分值区域内所有点到这个点贡献这个点不是分治重… 题目 这真是一道神仙的一批的题目 定义\(s(i,j)\)表示从点\(i\)到点\(j\)经过的颜色数量 设 \[sum_i\sum_{j1}^ns(i,j)\] 求出所有的\(sum_i\) 考虑点分治 对于一个点我们用两种方式来统计其答案 这个点作为分治重心时分值区域内所有点到这个点贡献这个点不是分治重心的时候当前分治区域内其他子树到这个点的贡献第一种贡献我们很好统计点分治的时候把所有子树遍历一遍就好了 第二种就需要转换一下思路了我们不能直接求\(s(i,j)\)了我们应该求某一种颜色一共被数了多少次 我们开一个桶\(tax\)\(tax[i]\)表示\(i\)这种颜色控制的大小一共是多少也就是这个颜色会被多少个终点数到我们可以通过提前遍历好所有子树得到这个信息 每次进入一棵子树的时候提前减掉这个子树的贡献之后进入子树\(dfs\)就好了如果一旦出现一种新颜色显然这种颜色会被当前分治区域内所有点数上更改一下贡献即可 代码 #includealgorithm #includeiostream #includecstring #includecstdio #includevector #define maxn 100005 #define re register #define inf 99999999 #define LL long long #define max(a,b) ((a)(b)?(a):(b)) #define min(a,b) ((a)(b)?(a):(b)) inline int read() {int x0;char cgetchar();while(c0||c9) cgetchar();while(c0c9) x(x3)(x1)c-48,cgetchar();return x; } struct E{int v,nxt;}e[maxn1]; int col[maxn],head[maxn],vis[maxn],sum[maxn],mx[maxn]; int f[maxn],tax[maxn],d[maxn],st[maxn],tmp[maxn]; int num,n,m,now,S,rt,top; LL ans,Ans[maxn],res; std::vectorint v[maxn],c[maxn]; inline void add(int x,int y) {e[num].vy;e[num].nxthead[x];head[x]num;} void getroot(int x,int fa) {sum[x]1,mx[x]0;for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]||e[i].vfa) continue;getroot(e[i].v,x);sum[x]sum[e[i].v],mx[x]max(mx[x],sum[e[i].v]);}mx[x]max(mx[x],S-sum[x]);if(mx[x]now) nowmx[x],rtx; } void getdis(int x,int fa,int now,int t) {if(!f[col[x]]) now;if(!tmp[col[x]]) st[top]col[x];tmp[col[x]]1;sum[x]1;f[col[x]];Ans[t]now;for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]||e[i].vfa) continue;getdis(e[i].v,x,now,t);sum[x]sum[e[i].v];}if(f[col[x]]1) d[col[x]]sum[x];f[col[x]]--; } void find(int x,int fa) {if(!f[col[x]]) ans-tax[col[x]],ansres;Ans[x]ans;f[col[x]];for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]||e[i].vfa) continue;find(e[i].v,x);} if(f[col[x]]1) ans-res,anstax[col[x]];f[col[x]]--; } void dfs(int x) {vis[x]1;ans0;f[col[x]]1;for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]) continue;top0;getdis(e[i].v,0,1,x);for(re int j1;jtop;j) if(st[j]!col[x]) v[e[i].v].push_back(d[st[j]]),c[e[i].v].push_back(st[j]);for(re int j1;jtop;j) if(st[j]!col[x]) tax[st[j]]d[st[j]],ansd[st[j]];for(re int j1;jtop;j) tmp[st[j]]0,d[st[j]]0;}f[col[x]]0;ansS,tax[col[x]]S;for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]) continue;resS-sum[e[i].v];ans-sum[e[i].v],tax[col[x]]-sum[e[i].v];for(re int j0;jv[e[i].v].size();j) ans-v[e[i].v][j],tax[c[e[i].v][j]]-v[e[i].v][j];find(e[i].v,0);for(re int j0;jv[e[i].v].size();j) ansv[e[i].v][j],tax[c[e[i].v][j]]v[e[i].v][j];anssum[e[i].v],tax[col[x]]sum[e[i].v];}for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]) continue;for(re int j0;jv[e[i].v].size();j)tax[c[e[i].v][j]]-v[e[i].v][j];v[e[i].v].clear(),c[e[i].v].clear();}tax[col[x]]0;for(re int ihead[x];i;ie[i].nxt) {if(vis[e[i].v]) continue;nowinf,Ssum[e[i].v],getroot(e[i].v,0),dfs(rt);} } int main() {nread();int x,y;for(re int i1;in;i) col[i]read();for(re int i1;in;i) xread(),yread(),add(x,y),add(y,x);Sn,nowinf,getroot(1,0);dfs(rt);for(re int i1;in;i) printf(%lld\n,Ans[i]1ll);return 0; } 转载于:https://www.cnblogs.com/asuldb/p/10425326.html
http://www.lebaoying.cn/news/41238.html

相关文章:

  • 网站开发及代运营苏州市建设中心网站
  • 网站导航网站开发超级优化大师
  • 电商网站100排行榜做医院网站公司电话
  • 网站备案 几年中企动力主要是做什么的
  • PHP网站开发项目式教程上海中风险地区
  • 台州外贸网站10套免费ppt模板
  • 昆明网站建设logovi中国最好的编程学校
  • 服装设计网站有哪些软件开发专业能力
  • 北海做网站哪家好wordpress导航栏下拉菜单代码
  • 丰涵网站建设科技vi设计的流程
  • 网站开发怎么谈客户石家庄云图网站建设
  • 网站建设面谈销售话术wordpress 2.7.1下载
  • 常州网上教科院十堰seo推广
  • 大型门户网站建设大概多少钱wordpress 标签设置主页
  • 手机网站价格做网站网页需要多久
  • 网站后台做图片尺寸是多大海口网站建设是什么意思
  • ppt成品免费下载的网站图跃企业网站建设
  • 网站开发如何使用API个人宽带备案网站
  • 西安门户网站开发工商公示网
  • 深圳网站优化推广谷歌竞价推广教程
  • 如何做网站跳转页面wordpress jsp版
  • 手机wap网站建站系统项目协同管理平台
  • 企业网站后端模板红包app开发软件
  • 靖江做网站哪家好wordpress在线网校系统
  • 网站建设确认表傻瓜网站开发工具
  • 广州建立网站的公司网站自建网站推广的最新发展
  • 网站的作用网站建设商城网站
  • 单页销售网站制作制作wordpress博客页面修改
  • 西安网站定制开发做数据库与网站招什么人
  • 能在家做的兼职的网站百度指数搜索