codevs3728 联合权值
1、以每一个点为轴,左右两个点算权值
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn =;
struct edge{
int next;
int to;
int power;
};
edge test[maxn];
int head[maxn],cur = ,n,j[maxn],p[maxn],max1[maxn],max2[maxn],nmax1[maxn],coun[maxn];
long long int vall = ,vmax = ,sub =; int use(int i)
{
int t=head[i];
int ti,tmp,sum=,cha2=; while (t!=-)
{ ti=test[t].to;
sum=(sum+p[ti]%)%;
cha2+=p[ti]*p[ti]%;
if (p[ti]>max1[i] )
{ max1[i]=p[ti];
nmax1[i]=ti;
}
t=test[t].next;
coun[i]++; }
sum=(sum*sum% +-cha2%)%;
vall+=sum%;
return sum;
} /*int dfs(int deep,int last,int now){
if(deep == 2){
if(last == now) return 0;
int temp;
temp = p[now]* p[last];
if(temp > vmax) vmax = temp;
return 0;
} for(int k=head[now];k>-1;k=test[k].next){
dfs(deep + 1,last,test[k].to);
}
} */
void dfs(int i)
{ int ansi=;
if (coun[i]>)
{
int t=head[i];
int ti;
while (t!=-)
{
ti=test[t].to;
if (ti!=nmax1[i] )
{
if (p[ti]>max2[i] )
max2[i]=p[ti];}
t=test[t].next;
}
}
if (vmax<max1[i]*max2[i] ) vmax=max1[i]*max2[i]; } void add(int u,int v,int w){
test[cur].power = w;
test[cur].to = v;
test[cur].next = head[u];
head[u] = cur++;
}
int main(){
cin>>n;
int u,v,w;
for(int i = ;i < n;i++){
test[i].power = ;
test[i].next = -;
head[i] = -;
j[i] = ;
}
int tu,tv;
for(int i = ;i < n-;i++){
cin>>tu>>tv;
tu--;
tv--;
add(tu,tv,);
add(tv,tu,); }
for(int i = ;i < n;i++) cin>>p[i]; for(int i = ;i < n;i++)use(i);
for(int i = ;i < n;i++)dfs(i);
cout<<vmax<<" "<<vall % <<endl;
return ;
}
codevs3728 联合权值的更多相关文章
- codevs3728联合权值(LCA)
3728 联合权值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 输入描述 Input Des ...
- 「NOIP2014」「Codevs3728」 联合权值(乱搞
3728 联合权值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 输入描述 Input Description 输出描述 Ou ...
- [NOIP2014提高组]联合权值
题目:洛谷P1351.Vijos P1906.codevs3728.UOJ#16. 题目大意:有一个无向连通图,有n个点n-1条边,每个点有一个权值$W_i$,每条边长度为1.规定两个距离为2的点i和 ...
- Codevs 3728 联合权值
问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...
- P1906联合权值
描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...
- [NOIP2014] 提高组 洛谷P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- NOIp 2014 #2 联合权值 Label:图论 !!!未AC
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- 【洛谷P1351】联合权值
我们枚举中间点,当连的点数不小于2时进行处理 最大值好搞 求和:设中间点 i 所连所有点权之和为sum 则对于每个中间点i的联合权值之和为: w[j]*(sum-w[j])之和 #include< ...
- Noip2014 提高组 T2 联合权值 连通图+技巧
联合权值 描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的 ...
随机推荐
- String的用法——判断功能
package cn.itcast_03; /* String的判断功能: 1.boolean equals(Object obj):字符串的内容是否相同,区分大小写 2.boolean equals ...
- .NET 微信开发之 获取用户数据
通过微信接口获取用户信息主要分为以下几个步骤: a.获取公众号的access_token b.通过查询所有用户OPenid接口获取所有用户. string url = "https://ap ...
- Android GetTimeAgo(时间戳转换几天前,几分钟前,刚刚等)
package com.studychen.seenews.util; import android.content.Context; /** * Created by tomchen on 2/26 ...
- Scala基础篇-02函数与代码块
1.block 代码块也是表达式,其最终求得的值是最后一个表达式的值. {exp1;exp2} { exp1 exp2 } 2.function def funtionName(param:Param ...
- iOS Programming Dynamic Type 1
iOS Programming Dynamic Type 1 Dynamic Type is a technology introduced in iOS 7 that helps realize ...
- SQLite busy handler
SQLite doesn't support high concurrency. In case of a lot of concurrent access from multi-process or ...
- element ui 在vue中使用可能遇到的问题
组件使用参照官网http://element.eleme.io/#/zh-CN/component/quickstart 在 main.js 中写入以下内容: import Vue from 'vue ...
- Windows live writer 2012 测试
升级到win10,居然Windows live writer不能用了,装了好久就是装不上去,wlsetup-web.exe 在线安装失败,wlsetup-all.exe离线安装也失败了. 安装Blog ...
- 说说windows10自带浏览器Edge的好与不好
用了10几个月了,正式版也升级了,今天来说说微软自带浏览器microsoft Edge的好与不好 先说好的吧 一,浏览器速度非常快,无论是打开还是关闭,或者是语音助手小娜需要调动浏 ...
- mysql中 for update 使用
解释: for update是在数据库中上锁用的,可以为数据库中的行上一个排它锁.当一个事务的操作未完成时候,其他事务可以读取但是不能写入或更新.例子: 比如一张表三个字段 , id(商品id), n ...