秀秀的森林(forest)

题目要求树上两条不相交的链,且要求权值的和最大

性质:

1.如果某棵树上的最长链端点为x,y,则该树上任意一点z出发的最长链为max(xz,zy)

2如果两个点被连进了树里,那么他们的lca也一定被连进了树里、

有了这个,合并就很好做了

假设合并A,B两棵树,最长链端点为ax,ay ,bx,by

比较两两相连的答案取max即可

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 100005
#define ll long long
#define mod 1000000007
using namespace std;
int n,head[maxn],s[maxn],id[maxn],f[maxn][21],t1,t2,tot=1;
int x[maxn],y[maxn],v[maxn],ans,f1,f2,be[maxn];
int deep[maxn],d[maxn];
ll A[maxn];
struct node{int v,nex;
}e[maxn*2];
void lj(int t1,int t2){e[++tot].v=t2;e[tot].nex=head[t1];head[t1]=tot;
}
void dfs(int k,int fa){f[k][0]=fa;deep[k]=deep[fa]+1;d[k]=d[fa]+s[k];for(int i=head[k];i;i=e[i].nex){if(e[i].v!=fa)dfs(e[i].v,k);}
}
int getf(int k){if(be[k]==k)return k;be[k]=getf(be[k]);return be[k];
}
int Lca(int a,int b){if(deep[a]<deep[b])swap(a,b);for(int x=20;x>=0;x--)if(deep[f[a][x]]>=deep[b])a=f[a][x];for(int x=20;x>=0;x--)if(f[a][x]!=f[b][x])a=f[a][x],b=f[b][x];if(a==b)return a;else return f[a][0];
}
int Len(int a,int b){int lca=Lca(a,b);return d[a]+d[b]-d[lca]-d[f[lca][0]];
}
ll work(int k,int num){ll ss=1,p=k;while(num){if(num&1)ss=ss*p;p=p*p;p%=mod;ss=ss%mod;num>>=1;}return ss;
}
int main()
{cin>>n;for(int i=1;i<=n;i++)scanf("%d",&s[i]);for(int i=1;i<n;i++){scanf("%d%d",&t1,&t2);lj(t1,t2);lj(t2,t1);}for(int i=1;i<n;i++)scanf("%d",&id[i]);dfs(1,0);for(int j=1;j<=20;j++)for(int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];ll ans=1;for(int i=1;i<=n;i++){x[i]=y[i]=i;v[i]=s[i];ans=ans*s[i]%mod;be[i]=i;}A[n]=ans;for(int num=n-1;num>=1;num--){int t1=e[id[num]*2].v,t2=e[id[num]*2+1].v;if(f[t1][0]!=t2)swap(t1,t2);f1=getf(t1);f2=getf(t2);be[f1]=f2;int ax=x[f1],ay=y[f1],bx=x[f2],by=y[f2];int ansx,ansy,ansv,T;if(v[f1]>v[f2])ansv=v[f1],ansx=ax,ansy=ay;else ansv=v[f2],ansx=bx,ansy=by;T=Len(ax,bx);if(T>ansv)ansv=T,ansx=ax,ansy=bx;T=Len(ax,by);if(T>ansv)ansv=T,ansx=ax,ansy=by;T=Len(ay,bx);if(T>ansv)ansv=T,ansx=ay,ansy=bx;T=Len(ay,by);if(T>ansv)ansv=T,ansx=ay,ansy=by;ans=ans*work(v[f1],mod-2)%mod*work(v[f2],mod-2)%mod;v[f2]=ansv;x[f2]=ansx,y[f2]=ansy;//cout<<ansx<<' '<<ansy<<' '<<ansv<<' '<<Lca(ansx,ansy)<<endl; ans=ans*ansv%mod;A[num]=ans;//cout<<ans<<' '<<ansv<<endl;}for(int i=1;i<=n;i++)printf("%lld\n",A[i]);return 0;
}

转载于:https://www.cnblogs.com/liankewei/p/10358794.html

秀秀的森林(forest)相关推荐

  1. 【题解】10-19秀秀的森林(forest)

    我恨秀秀 倍增LCA+离线 (时光倒流) 题目 秀秀有一棵带

  2. [Python] Codecombat攻略 远边的森林 Forest (1-40关)

    首页:https://cn.codecombat.com/play 语言:Python 第二界面:远边的森林Forest(40关) 时间:2-6小时 内容:if/else.关系操作符.对象属性.处理输 ...

  3. 手把手实战机器学习系列: 随机森林

    https://www.toutiao.com/a6655458544508207630/ 2019-02-08 11:43:58 我们将探索决策树,并且拓展它到随机森林.这种类型的模型,和我们之前见 ...

  4. java 森林_森林 - Minecraft Wiki,最详细的官方我的世界百科

      本文章介绍的是常规森林.关于其他森林生物群系,请见" 森林(Forest)群系是一种常见的茂密生物群系.它一共有3种变种. 森林群系的一大特点是在其绵延的地形中有大量的橡树与白桦树.在森 ...

  5. forest种树未能连接到服务器,今天,你种树了吗?

    原标题:今天,你种树了吗? 近期是各大高校期末考的高峰期 同学们突然都开始种起了"树" 这到底是一颗怎样的树呢? 软件 forest专注森林 Forest 专注森林是一个帮助用户暂 ...

  6. 随机森林(RandomForestClassifier)----概述与应用

    文章目录 随机森林 构造随机森林 自主采样(bootstrap sample) 特征子集随机选择 随机森林中的回归问题与分类问题 sklearn实现.分析随机森林 优点.缺点及参数 随机森林 对于决策 ...

  7. mSystems:南京土壤所禇海燕组受邀发表微生物生物地理学综述(官方配视频简介)

    文章目录 瞬息万变的世界中的土壤微生物生物地理学:最新进展和未来展望 写在前面 视频介绍 快讯 图 1 长期以来在微生物生物地理学领域已发表文章的数量 图 2 土壤微生物生物地理学中需要进行时空研究的 ...

  8. 数据结构C#版笔记--树与二叉树

    图1 上图描述的数据结构就是"树",其中最上面那个圈圈A称之为根节点(root),其它圈圈称为节点(node),当然root可以认为是node的特例. 树跟之前学习过的线性结构不同 ...

  9. 树 - 定义和基本概念

    一.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(root)的结点. (2)当n>1时,其余结点可分为m(m>0 ...

最新文章

  1. GitHub的AI程序员“抄袭”算法大神代码,连原版注释都抄上了
  2. 前序中序确认二叉树 7-23 还原二叉树(25 分)
  3. NGINX Config
  4. Redis集群监控RedisClusterManager
  5. Erwin 生成 mysql 带注释(comment )的脚本
  6. pynput模块—键盘鼠标操作和监听
  7. 课节5:图神经网络算法(二):领居聚合
  8. linux下休眠/待机命令
  9. 从零搭建ES搜索服务(一)基本概念及环境搭建
  10. node版本管理和npm源管理工具
  11. 前端复习笔记(三)——JavaScript和JQuery
  12. (转)OpenStack Kilo 版本中 Neutron 的新变化
  13. 瀏覽器擴展──釋放你的個性
  14. CF卡显示位置不可用无法访问介质受写入保护怎么办
  15. 通过 wordexport插件 js jq 生成word文档 并导出
  16. 实验三 16位机指令系统实验报告
  17. 天理-数据结构(考研)
  18. ECCV2018 | PKT_概率知识蒸馏
  19. 网页无法显示GIF动画图片解决办法
  20. html设计动画小黄人,用纯css3画一个小黄人并实现动画效果

热门文章

  1. 安装class-dump
  2. ios 中的小技巧 - 总有你想要的 一
  3. C#中char[]与string之间的转换
  4. Vitamio打造自己的Android万能播放器
  5. SpringCloud学习(七)高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)
  6. 特征选择和特征生成问题初探
  7. 假几何真逆序数 NB HDU3465
  8. js高程(二)-----继承
  9. ios开发多线程篇--异步加载网络图片GCD
  10. 163k地方门户网站系统团购定时结束限量控制