Noip2014 提高组 T2 联合权值 连通图+技巧
联合权值
描述
无向连通图 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取余。
限制
对于 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 联合权值 连通图+技巧的更多相关文章
- 【NOIP2014提高组】联合权值
https://www.luogu.org/problem/show?pid=1351 既然是一棵树,就先转化成有根树.有根树上距离为2的点对,路径可能长下面这样: 枚举路径上的中间点X. 第一种情况 ...
- NOIP 提高组 2014 联合权值(图论???)
传送门 https://www.cnblogs.com/violet-acmer/p/9937201.html 题解: 相关变量解释: int n; int fa[maxn];//fa[i] : i的 ...
- 题解【luoguP1351 NOIp提高组2014 联合权值】
题目链接 题意:给定一个无根树,每个点有一个权值.若两个点 \(i,j\) 之间距离为\(2\),则有联合权值 \(w_i \times w_j\).求所有的联合权值的和与最大值 分析: 暴力求,每个 ...
- NOIP 2014 T2 联合权值 DFS
背景 NOIP2014提高组第二题 描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每条边的长度均为1.图上两点(u, v)的距离定义为u点到v点的最短距离.对 ...
- 【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值
不难发现,树中与某个点距离为2的点只可能是它的父亲的父亲.儿子的儿子 或者 兄弟,分类讨论一下即可. 只有对于兄弟我们不能暴力搞,维护一下每个节点的所有儿子的前缀和.前缀MAX就行了. #includ ...
- NOIP2014提高组 DAY1 -SilverN
T1 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的 ...
- noip2014 提高组
T1 生活大爆炸版 石头剪刀布 题目传送门 就是道模拟题咯 #include<algorithm> #include<cstdio> #include<cstring&g ...
- NOIP2014提高组 题解报告
D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...
- 【学术篇】luogu1351 [NOIP2014提高组] 联合权值
一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...
随机推荐
- caffe中的filler.hpp源码的作用:
filler.hpp文件:(它应该没有对应的.cpp文件,一切实现都是在头文件中定义的,可能是因为filler只分在网络初始化时用到那么一次吧) 1,首先定义了基类:Filler,它包括:一个纯虚函数 ...
- 什么是Plist文件
直接将数据直接写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低 因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果 ...
- Spring集成JPA提示Not an managed type
在做Spring与JPA集成时,出现问题如下: Caused by: java.lang.IllegalArgumentException: Not an managed type: class co ...
- select动态增加option
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- 转:从开源项目学习 C 语言基本的编码规则
从开源项目学习 C 语言基本的编码规则 每个项目都有自己的风格指南:一组有关怎样为那个项目编码约定.一些经理选择基本的编码规则,另一些经理则更偏好非常高级的规则,对许多项目而言则没有特定的编码规则,项 ...
- request is not finfished yet!
在项目测试的时候发现一个问题.当数据量特别多的时候,我一次性查询几万条数据的时候,就会出现很卡很慢的状态. 我把sql优化了,但是出现同样的问题.我要从后台得到数据显示在页面上来.就需要知道是查询慢, ...
- C#_观察者模式
假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户. 把通知这个动作抽象成一个接口. public interface IService { void Notif(); } 客户如果想获得通 ...
- Hbase之进行批处理操作
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...
- R语言实战
教材目录 第一部分 入门 第一章 R语言介绍 第二章 创建数据集 第三章 图形初阶 第四章 基本数据管理 第五章 高级数据管理 第二部分 基本方法 第六章 基本图形 第七章 基本统计方法 第三部分 中 ...
- CollectionFramework