原题传送门

这道题瞄了一眼还以为是SPFA最短路。

后面发现距离为2.。

好像可以枚举中间点来着?

时间效率O(n*(2n-2))≈O(n^2)

BOOM!(PS:9018上过了,说明数据太水了。。)

然后我们看看能不能预处理。。

第一大和第二大可以预处理233~

然后sum(中间点的临近点的权值总和)可以预处理。。。

然后就过了?O(n)

哦,对了忘记讲算法:

最大的联合权值就是中间点的临近点的第一大*第二大。。

所有的联合权值。。

我们假设有三个点a,b,c 那么联合权值=ab+ac+ba+bc+ca+cb=a(b+c)+b(a+c)+c(a+b)=a(sum-a)+b(sum-b)+c(sum-c);

然后就可以O(n)啦!

O(∩_∩)O~~。。

下面先贴O(n^2)代码

#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 10007
using namespace std;
int n,num=;
struct edge{
int to,next;
}g[];
int head[],sum=;
int w[];
void ins(int x1,int y1)
{
g[++num].next=head[x1];
head[x1]=num;
g[num].to=y1;
}
void addedge(int x1,int y1)
{
ins(x1,y1);
ins(y1,x1);
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
addedge(x,y);
}
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
int ans1=,ans2=;
for(int i=;i<=n;i++)
{
int max1=-,max2=-;
for(int j=head[i];j;j=g[j].next)
{
int tmp=w[g[j].to];
sum+=tmp;
sum%=mod;
if(tmp>max1)
{
max2=max1;
max1=tmp;
}
else if(tmp>max2)
{
max2=tmp;
}
}
ans1=max(ans1,max1*max2);
for(int j=head[i];j;j=g[j].next)
{
ans2+=(w[g[j].to]*(sum-w[g[j].to]))%mod;
ans2%=mod;
}
sum=;
}
ans2=(ans2+mod)%mod;
printf("%d %d\n",ans1,ans2);
return ;
}

再贴O(N)代码(为啥比上面的还慢。。)

#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 10007
using namespace std;
int n,num=;
struct edge{
int to,from;
}g[];
int head[];
int w[];
int max1[],max2[];
int sum[];
void ins(int x1,int y1)
{
g[++num].to=y1;
g[num].from=x1;
}
void work(int q,int r){
if(w[q]>max1[r])
{
max2[r]=max1[r];
max1[r]=w[q];
}
else if(w[q]>max2[r]) max2[r]=w[q];
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ins(x,y);
}
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
int ans1=,ans2=;
for(int i=;i<n;i++)
{
int u=g[i].from,v=g[i].to;
sum[u]=(sum[u]+w[v])%mod;
sum[v]=(sum[v]+w[u])%mod;
work(u,v);
work(v,u);
} for(int i=;i<=n;i++)ans1=max(ans1,max1[i]*max2[i]);
for(int i=;i<n;i++)
{
int u=g[i].from,v=g[i].to;
ans2+=(w[u]*(sum[v]-w[u]))%mod;
ans2%=mod;
ans2+=(w[v]*(sum[u]-w[v]))%mod;
ans2%=mod;
}
ans2=(ans2+mod)%mod;
printf("%d %d\n",ans1,ans2);
return ;
}

联合权值(NOIP2014)奇特的模拟。。的更多相关文章

  1. [Luogu 1351] NOIP2014 联合权值

    [Luogu 1351] NOIP2014 联合权值 存图,对于每一个点 \(u\),遍历它的所有邻接点.以 \(u\) 为中转点的点对中,\((x,y)\) 的联合权值 \(w_x \cdot w_ ...

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

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

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

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

  4. NOIP2014 联合权值

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

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

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

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

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

  7. 【NOIP2014】联合权值 树上dp

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

  8. 【洛谷P1351】[NOIP2014]联合权值

    联合权值 题目链接 首先,直接两重循环暴力枚举得了70分 然后发现第二重循环可以记忆化一下 记忆一下每个点的子节点的权值和.最大值. 次大值(为了处理该点的父节点权值恰好为最大值) 具体看代码 #in ...

  9. NOIP2014提高组 联合权值(距离为2的树形dp)

    联合权值 题目描述 无向连通图 GG 有 nn 个点,n-1n−1 条边.点从 11 到 nn 依次编号,编号为 ii 的点的权值为 W_iWi​,每条边的长度均为 11.图上两点 (u, v)(u, ...

随机推荐

  1. 统计输入任意的字符中中英文字母,空格和其他字符的个数 python

    这里用到了三个函数: #判断是否为数字:str.isdigit()#是否为字母:str.isalpha()#是否为空格:str.isspace() def tongji(str): alpha = 0 ...

  2. ABAP CDS - SELECT, association

    ABAP CDS - SELECT, association Syntax ... ASSOCIATION [ [min..max] ] TO target [AS _assoc] ON cond_e ...

  3. 设置默认以管理员运行的WinForm

    右键工程名, 属性; 选择"安全性"; 勾选"启用ClickOnce安全设置"与"这是完全可信的应用程序"; 退出该页面, app.mani ...

  4. ArrayList & Vector的源码实现

    #ArrayList & Vector #####前言: 本来按照计划,ArrayList和Vector是分开讲的,但是当我阅读了ArrayList和Vector的源码以后,我就改变了注意,把 ...

  5. 7 Vue.js实现loading1

    1 2 3 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter ...

  6. Android stadio butternife工具

    http://www.androidchina.net/5068.html svn今天我对它有了更深的认识.我知道了有冲突了不能提交.但是可以update,updata之后就会有冲突的东西生成,如果你 ...

  7. selenium + python之元素定位

    selenium对web各元素的操作首先就要先定位元素,定位元素的方法主要有以下几种:通过id定位元素:find_element_by_id("id_vaule")通过name定位 ...

  8. 使用 JsonPath 完成接口自动化测试中参数关联和数据验证(Python语言)

    背景: 接口自动化测试实现简单.成本较低.收益较高,越来越受到企业重视 restful风格的api设计大行其道 json成为主流的轻量级数据交换格式 痛点: 接口关联 也称为关联参数.在应用业务接口中 ...

  9. markdown备忘

    文章主要(99%)参考自:markdown基本语法 这是二级标题 这是加粗的文字 这是倾斜的文字` 这是引用的内容 这是引用的内容 以下是分割线: 超链接 列表内容1 列表内容2 列表内容3 1.列表 ...

  10. 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2

    孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第九天. 今天继续学习mongoDB的简单操作, ...