联合权值

描述

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

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

格式

输入格式

第一行包含 1 个整数 n。

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

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

输出格式

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

样例1

样例输入1[复制]

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

样例输出1[复制]

 
20 74

限制

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

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

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

解题报告:

  刚开始的时候,是直接想的暴力,用一个O(n^3)然后我想我一定是疯了,200000,数组也大的不行,就把电脑弄死机了。。。正在考试,学校的电脑一关机就什么都没有了,于是,苦逼的我只好重新把第一题写一遍,还好简单。可接下来,我就陷入了想第二题的深渊,无法自拔,看出他是一棵树后,开始学着树规编,可是树规也没学好,还不是特别熟悉,最后还剩半个小时,算了算了,写暴力。。啊,暴力还没有调出来,就交卷了。

  所以,要加快做题速度。

  正解:首先枚举每一个点,找他周围的最大与第二大的点,相乘的联合权值则为以这个点为中心的最大值,最后把所有点的最大权值扫一遍,然后就得到ans2.至于权值之和,我们举一个例子:

     i 这个点连了 1 2 3 三个点 ,那么权值之和即:w1*w2+w1*w3+w2*w3,技巧来了,根据乘法分配律,原式=w1*0+w2*w1+w3*(w1+w2)

  根据这个,可以设一个数组存括号内的累和,然后与当前相乘,加入ans1;

代码如下:

 #include<iostream>
#include<cstdio>
using namespace std;
const int maxn=,inf=;
int n,ans,maxx;
int m1[maxn],m2[maxn],a[maxn],b[maxn],w[maxn];
long long s[maxn],s2[maxn],sum;
void doit(int x,int y)
{
if (m1[x]==) m1[x]=w[y];
else if (w[y]>m2[x])
{
if (w[y]>m1[x]){
m2[x]=m1[x];
m1[x]=w[y];
}else{
m2[x]=w[y];
}
}
s[x]=(s[x]+w[y]*s2[x])%inf;
s2[x]+=w[y];
}
int main()
{
freopen("link.in","r",stdin);
freopen("link.out","w",stdout);
cin>>n;
for (int i=;i<=n-;i++)
scanf("%d%d",&a[i],&b[i]);
for (int i=;i<=n;i++)
scanf("%d",&w[i]);
for (int i=;i<=n;i++)
{
int x=a[i],y=b[i];
doit (x,y);
doit (y,x);
}
for (int i=;i<=n;i++)
{
if (m1[i]*m2[i]>maxx) maxx=m1[i]*m2[i];
ans=(ans+s[i])%inf;
}
cout<<maxx<<" "<<(ans*)%inf;
return ;
}

值得注意的是:ans最后要乘2,因为有两个方向,另外,取mod 也很重要,特别是最后输出的时候。

我认为在这么多方法中,这个是最简单而易懂的。

Noip2014 提高组 T2 联合权值 连通图+技巧的更多相关文章

  1. 【NOIP2014提高组】联合权值

    https://www.luogu.org/problem/show?pid=1351 既然是一棵树,就先转化成有根树.有根树上距离为2的点对,路径可能长下面这样: 枚举路径上的中间点X. 第一种情况 ...

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

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

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

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

  4. NOIP 2014 T2 联合权值 DFS

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

  5. 【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值

    不难发现,树中与某个点距离为2的点只可能是它的父亲的父亲.儿子的儿子 或者 兄弟,分类讨论一下即可. 只有对于兄弟我们不能暴力搞,维护一下每个节点的所有儿子的前缀和.前缀MAX就行了. #includ ...

  6. NOIP2014提高组 DAY1 -SilverN

    T1  生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的 ...

  7. noip2014 提高组

    T1 生活大爆炸版 石头剪刀布 题目传送门 就是道模拟题咯 #include<algorithm> #include<cstdio> #include<cstring&g ...

  8. NOIP2014提高组 题解报告

    D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...

  9. 【学术篇】luogu1351 [NOIP2014提高组] 联合权值

    一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...

随机推荐

  1. Python学习笔记15—mysql的操作

    安装 Python-MySQLdb pip install mysql-Python Python对mysql的操作 建立一个实验数据库demo mysql> create database d ...

  2. hadoop 入门实例【转】

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 1.数据去重  "数据去重"主要是为了掌握 ...

  3. Android控件之EditText(输入文本框控件)

    一.EditText控件概述 EditText是一个非常重要的组件,可以说他是用户和Android应用进行数据传输窗口  有了他就等于有了一扇和Android应用传输的门,通过他用户可以把数据传输给A ...

  4. Hadoop的HA集群启动和停止流程

    假设我们有3台虚拟机,主机名分别是hadoop01.hadoop02和hadoop03. 这3台虚拟机的Hadoop的HA集群部署计划如下: 3台虚拟机的Hadoop的HA集群部署计划 hadoop0 ...

  5. RT-thread学习笔记(一)

    我的基础:能在现有C程序下做些修改,不会移植,不会写驱动,很难从头到尾自己写程序. RT-thread基础:之前看了一点rtthread_manual.zh.pdf(即RT-thread使用手册),发 ...

  6. 配置NGReport 报告中文

    1. 测试报告的名称 在测试开始或测试监听器的类中加上下面一句代码即可: System.setProperty("org.uncommons.reportng.title", &q ...

  7. hdu----(1257)最少拦截系统(dp/LIS)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. 张艾迪(创始人):世界级天才女孩Eidyzhang

    让整个世界与我们一同解读世界第一天才:Eidyzhang 她改变了整个世界.她的故事也激励了整个世界的不论亚洲.欧洲.非洲.南美州.北美洲.南极洲 天才Eidyzhang的故事激励了整个世界不论黑人. ...

  9. spring配置带参数的视图解析器:ParameterMethodNameResolver

    1.配置处理器 <!-- 处理器 --> <bean id="myController" class="cn.cnsdhzzl.controller.M ...

  10. struts2配置通用action一个顶N个,你还在写一大堆action吗?

    <!-- 通用action!!!约定优于配置 --> <action name="*_*" class="cn.cnsdhzzl.action.{1}A ...