洛谷 P1351 联合权值

洛谷传送门

JDOJ 2886: [NOIP2014]联合权值 D1 T2

JDOJ传送门

Description

无向连通图 G有 n个点,n-1条边。点从 1到 n依次编号,编号为 i的点的权值为 Wi,每条边的长度均为 1。图上两点 (u, v)的距离定义为 u点到 v点的最短距离。对于图 G上的点对(u, v),若它们的距离为 2,则它们之间会产生Wu×Wv的联合权值。

请问图 G上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少?

Input

第一行包含 1个整数 n。

接下来 n-1行,每行包含 2个用空格隔开的正整数 u、v,表示编号为 u和编号为 v的点之间有边相连。

最后 1行,包含 n个正整数,每两个正整数之间用一个空格隔开,其中第 i个整数表示图 G上编号为 i的点的权值为 Wi。

Output

输出共 1行,包含 2个整数,之间用一个空格隔开,依次为图 G上联合权值的最大值和所有联合权值之和。由于所有联合权值之和可能很大,输出它时要对 10007取余。

Sample Input

5 1 2 2 3 3 4 4 5 1 5 2 3 10

Sample Output

20 74

HINT

【样例说明】

本例输入的图如上所示,距离为 2的有序点对有(1,3)、(2,4)、(3,1)、(3,5)、(4,2)、(5,3)。其联合权值分别为 2、15、2、20、15、20。其中最大的是 20,总和为 74。

【数据说明】

对于 30%的数据,1< n ≤100;

对于 60%的数据,1< n ≤2000;

对于 100%的数据,1< n ≤200,000,0< Wi ≤10,000。

标签给的LCA,纯属P话。

这题不需要LCA的过程。根据题面,这是一棵树。

保证了没有环。

然后呢?我们就能发现,距离为2的点会有联合权值,那么我们就可以断定,这两个点是连在一个父亲节点上的。

然后我们就可以得出枚举的大致思路。

先枚举每个点,枚举它的所有出边,记录最大值和次大值,这个最大值和次大值之积就是第一问的解。

比较麻烦的是第二问。

它需要累加联合权值,这个temp是每次枚举到一个节点的时候的中转值,它需要累加权值,最后的temp就是这个父亲节点所能拼凑出的所有联合权值的值,然后累加ans2,注意取模。

最后还有答案的特殊处理。

就这样AC吧

#include<cstdio>
#include<algorithm>
using namespace std;
const int mod=1e4+7;
int n,ans1,ans2;
int tot,to[400001],nxt[400001],head[200001],w[200001];
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
for(int i=1;i<=n;i++)
{
int max1=0,max2=0;
int temp=0;
for(int j=head[i];j;j=nxt[j])
{
int y=to[j];
if(w[y]>max1)
{
max2=max1;
max1=w[y];
}
else if(w[y]>max2)
max2=w[y];
ans2=(ans2+temp*w[y])%mod;
temp=(temp+w[y])%mod;
}
ans1=max(ans1,max1*max2);
}
printf("%d %d",ans1,(ans2*2)%mod);
return 0;
}

NOIP 2004 联合权值的更多相关文章

  1. Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)

    Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...

  2. [NOIp 2014]联合权值

    Description 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v ...

  3. NOIp 2014 联合权值 By cellur925

    题目传送门 这题自己(真正)思考了很久(欣慰). (轻而易举)地发现这是一棵树后,打算从Dfs序中下功夫,推敲了很久规律,没看出来(太弱了). 开始手动枚举距离为2的情况,模模糊糊有了一些概念,但没有 ...

  4. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  5. NOIP 提高组 2014 联合权值(图论???)

    传送门 https://www.cnblogs.com/violet-acmer/p/9937201.html 题解: 相关变量解释: int n; int fa[maxn];//fa[i] : i的 ...

  6. 题解【luoguP1351 NOIp提高组2014 联合权值】

    题目链接 题意:给定一个无根树,每个点有一个权值.若两个点 \(i,j\) 之间距离为\(2\),则有联合权值 \(w_i \times w_j\).求所有的联合权值的和与最大值 分析: 暴力求,每个 ...

  7. NOIP 2014 T2 联合权值 DFS

    背景 NOIP2014提高组第二题 描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每条边的长度均为1.图上两点(u, v)的距离定义为u点到v点的最短距离.对 ...

  8. Codevs 3728 联合权值

    问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...

  9. P1906联合权值

    描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...

随机推荐

  1. Ensight——Fluent重叠网格解决方案【翻译】

    原文链接:https://support.ceisoftware.com/hc/en-us/articles/360000664191-Overset-Grid-Solutions-from-Flue ...

  2. Django中render_to_response和render的区别(转载)

    转载地址:https://www.douban.com/note/278152737/ 自django1.3开始:render()方法是render_to_response的一个崭新的快捷方式,前者会 ...

  3. String.format方法使用-浅析(转)

    转自  https://blog.csdn.net/u010137760/article/details/82869637 1.代码中简单使用2.源码调用的方法3.相关类-Formatter3.1可选 ...

  4. Java基础语法面试题

    1,关于JDK,JRE,JVM [为什么安装包要分JDK和JRE?] 先来说说什么是JDK,JRE. JDK:Java Development Kit Java开发工具包[开发Java程序用] JRE ...

  5. IScroll Unable to preventDefault inside passive event listener due to target being treated as passive

    最近两天企业微信下IScroll突然无法滚动了,特别慢,之前好好的,发现主要是有红色的Unable to preventDefault inside passive event listener du ...

  6. JSON.parse() 与 JSON.stringify()

    JSON.parse() 方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象.提供可选的reviver函数用以在返回之前对所得到的对象执行变换(操作). 语法 JSON.par ...

  7. scala中停止循环的三种方式

    1:使用return关键字 object BreakLoop { //1.使用return关键字 def add():Unit= { for(i <- 1 to 10){ if(i==7){ / ...

  8. Prometheus Alertmanager 介绍详解

    Prometheus 之 Alertmanager 介绍详解 告警无疑是监控中非常重要的环节,虽然监控数据可视化了,也非常容易观察到运行状态.但我们很难做到时刻盯着监控,所以程序来帮巡检并自动告警,这 ...

  9. 【HTML】处理<br>换行符追加到前端换行无效的问题 --- html中渲染的字符串中包含HTML标签无效的处理方法,字符串中包含HTML标签被转义的问题 解决

    需求如下图: 追加给前台后,效果如下: 可以在源码看到: 是将后台给出来的数据,直接当作字符串给填充在了前台HTML中. 而查看浏览器编译后的HTML源码可以发现: 原来字符串中的<br> ...

  10. C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装

    源码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...