描述

无向连通图 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。

提示

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

来源

NOIP2014 提高组 Day1


题解:我一开始想到的就是先找与每个点相连的点的相连的点,来求联合权值,注意判重就行了;

但是TLE了三组

后来听他们说有种排序的方法,只用找兄弟之间的权值就行了

然后有两种处理方法

一是求Σ2wiwj=(Σwi)^2-Σwi^2————班长

二是用一个subsum来算每一个与改点相连的权值乘一次加一个————钊

我的代码有点蠢,需要两倍来保存

AC代码

 #include<cstdio>
#include<iostream>
#include<algorithm>
#define MAX 200005
using namespace std;
struct xx{
int v,u;
}no[*MAX];
int n;
int l;
int tot;
int fm[*MAX];
int maxw;
int sum,subsum;
int w[*MAX];
bool cmp(const xx a,const xx b)
{
return a.v<b.v;
}
int swap(int a,int b)
{
fm[a]+=fm[b];
fm[b]=fm[a]-fm[b];
fm[a]-=fm[b];
}
int main()
{
freopen("link.in","r",stdin);
freopen("link.out","w",stdout);
cin>>n;
for(int i=;i<n;i++)
{int a,b;
scanf("%d %d",&a,&b);
no[tot].v=a;
no[tot++].u=b;
no[tot].v=b;
no[tot++].u=a;
}
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
sort(no,no+tot,cmp);
while(l<=tot)
{
int r=l;
subsum=;
while(no[r].v==no[r+].v&&no[r].v)
{
fm[r]=w[no[r].u];
subsum=(subsum+fm[r])%;
r++;
if(r>tot)break;
}
fm[r]=w[no[r].u];
subsum=(subsum+fm[r])%;
r++;
if(r>l+)//区间大于1
{
for(int i=l;i<=l+;i++)
for(int j=i+;j<r;j++)
if(fm[i]<fm[j])
swap(i,j);
if(fm[l]*fm[l+]>maxw) maxw=fm[l]*fm[l+];//找最大值
subsum=(subsum*subsum)%;
for(int i=l;i<r;i++)
subsum=(subsum-fm[i]*fm[i]%+)%;
sum+=subsum%;
}
l=r;
}
printf("%d %d",maxw,sum%);
return ;
}

P1906联合权值的更多相关文章

  1. 【19.00%】【vijos p1906】联合权值

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

  2. [NOIP2014提高组]联合权值

    题目:洛谷P1351.Vijos P1906.codevs3728.UOJ#16. 题目大意:有一个无向连通图,有n个点n-1条边,每个点有一个权值$W_i$,每条边长度为1.规定两个距离为2的点i和 ...

  3. Codevs 3728 联合权值

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

  4. [NOIP2014] 提高组 洛谷P1351 联合权值

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

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

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

  6. 【洛谷P1351】联合权值

    我们枚举中间点,当连的点数不小于2时进行处理 最大值好搞 求和:设中间点 i 所连所有点权之和为sum 则对于每个中间点i的联合权值之和为: w[j]*(sum-w[j])之和 #include< ...

  7. Noip2014 提高组 T2 联合权值 连通图+技巧

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

  8. NOIP2014 联合权值

    2.联合权值 (link.cpp/c/pas) [问题描述] 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi  ,每条边的长度均为1.图上两点(u, v)的距离定义为u ...

  9. NOIP2014提高组第二题联合权值

    还是先看题吧: 试题描述  无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...

随机推荐

  1. fiddler 配置

    fiddler 是一个抓包工具: 配置模拟器:(逍遥游安卓模拟器) 逍遥参考:http://www.xyaz.cn/thread-163-1-1.html 1.启动模拟器后,点击设置,点击进入Wi-F ...

  2. Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

    最近老是遇见服务器内存溢出的问题,故在网上搜了搜,总结了一些java内存溢出的解决方式 java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都 ...

  3. Android之ProgressBar

    今天复习一下以前的知识,补充一下ProgressBar控件 progressBar是进度条组件,通常用于用户展示某个耗时操作完成的进度,而不让用户感觉是程序失去了响应,从而更好地提升用户界面的友好性. ...

  4. C#窗体技巧

    //限制文本框只能输入数字且允许按退格键删除数字,其它键盘输入不予显示private void 文本框名_KeyPress(object sender, KeyPressEventArgs e)  { ...

  5. POJ 1151 Atlantis(线段树-扫描线,矩形面积并)

    题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...

  6. VSS 的修复和扫描

    关闭所有连接到VSS的客户端如:VSS客户端及VS开发工具,在命令行模式下,运行这个方法: "C:\Program Files (x86)\Microsoft Visual SourceSa ...

  7. 网络-->监控-->OID-->BGP

    说明:暂时发现只适合cisco设备,h3c的交换机只支持部分OID(支持版本.AS号.ROUTER-ID)

  8. [工具.tfs]可视化的TFS命令工具——Team Foundation Sidekicks

    工具介绍:http://www.attrice.info/cm/tfs/index.htm Team Foundation Sidekicks is a suite of tools for Micr ...

  9. Ubuntu15下mysql5.6.25解决不支持中文的办法

    apt-get install 安装的,不是源码包安装的mysql 1 修改mysql的配置文件 /etc/mysql/conf.d/mysql.cnf 在[mysql]的下方加入如下语句:(注:这个 ...

  10. Ubuntu 15.10 x64 安装 Android SDK

    操作系统:Ubuntu 15.10 x64 目标:安装 Android SDK 本文最后更新时间:2015-11-3 安装32位库文件 2013年9月的iPhone 5s是第一款64位手机,而Andr ...