ssoj4009: 秀秀的森林(forest)

时间限制: 1 Sec 内存限制: 512 MB
提交: 46 解决: 17
[提交][状态][博客][加入收藏]
题目描述
秀秀有一棵带
n
n个顶点的树
T
T,每个节点有一个点权
a
i
ai。

有一天,她想拥有两棵树,于是她从
T
T中删去了一条边。

第二天,她认为三棵树或许会更好一些。因此,她又从她拥有的某一棵树中删去了一条边。

如此往复,每一天秀秀都会删去一条尚未被删去的边,直到她得到由
n
n棵只有一个点的树构成的森林。

秀秀定义一条简单路径(节点不重复出现的路径)的权值为路径上所有点的权值之和,一棵树的直径为树上权值最大的简单路径。秀秀认为树最重要的特征就是它的直径。所以她想请你算出任一时刻她拥有的所有树的直径的乘积。因为这个数可能很大,你只需输出这个数对
10
9
+
7
109+7取模之后的结果即可。

输入
输入的第一行包含一个整数
n
n,表示树
T
T上顶点的数量。

下一行包含
n
n个空格分隔的整数
a
i
ai,表示顶点的权值。

之后的
n

1
n−1行中,每一行包含两个用空格分隔的整数
u
i
ui和
v
i
vi,表示节点
u
i
ui和
v
i
vi之间连有一条边,编号为
i
i。

再之后
n

1
n−1行中,每一行包含一个整数
k
j
kj,表示在第
j
j天里会被删除的边的编号。

输出

n
n行,在第
i
i行,输出删除
n

1
n−1条边之后,所有树直径的乘积对
10
9
+
7
109+7取模的结果。

样例输入
3
1 2 3
1 2
1 3
2
1
样例输出
6
9
6
提示
样例解释

初始时,树的直径为6(由节点2、1 和3 构成的路径)。在第一天之后,得到了两棵直径都为3 的树。第二天之后,得到了三棵直径分别为1,2,3 的树,乘积为6。

数据范围 n,a[i]<=1e5

题解:
对于在树上拆分、询问的问题,直接模拟操作肯定不好做,故考虑离线,转化为加边的问题。那么考虑加一条边,即将两棵树合并为一棵树,已知两颗树上的最长链,要求合并后的最长链。考虑如何利用两棵树的最长链高效算出。发现最长链只可能是两颗子树分别的最长链或经过这条边的最长链,即这条边两端点的最长半链的和,最长半链端点一定在最长链上,故分讨即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Postman是一款常用的API开发和测试工具,可以用于发送HTTP请求并查看响应结果。在Postman中,可以通过Authorization界面来设置请求的认证方式。 以下是使用Postman的Authorization界面进行认证的步骤: 1. 打开Postman应用程序,并创建一个新的请求。 2. 在请求的URL栏中输入需要发送请求的URL地址。 3. 点击右侧的"Authorization"选项卡,进入认证设置界面。 4. 在认证设置界面中,选择合适的认证类型。根据提供的引用内容,可以选择"OAuth 2.0"认证类型。 5. 在"OAuth 2.0"认证类型下,填写相应的认证参数。根据提供的引用内容,需要填写"Authorization URL"和"Access Token URL"。 - 在"Authorization URL"中,填写引用中提供的URL地址:http://localhost:8090/auth/oauth/authorize?client_id=ssoj-pc&response_type=token - 在"Access Token URL"中,填写引用中提供的URL地址:http://localhost:8080/oauth/token?code=6s9qUj&grant_type=authorization_code&redirect_uri=http://www.mayikt.com/callback&scope=all 6. 根据需要,填写其他相关的认证参数,例如"Client ID"、"Client Secret"等。 7. 点击"Get New Access Token"按钮,开始进行认证流程。 8. 根据认证流程的要求,可能需要输入用户名和密码等信息。 9. 完成认证流程后,会在界面上显示获取到的Access Token信息。 10. 点击"Use Token"按钮,将Access Token添加到请求的Header中。 11. 完成认证设置后,可以点击"Send"按钮发送请求,并查看响应结果。 请注意,以上步骤仅为示例,实际使用时需要根据具体的认证方式和参数进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值