[Luogu 1351] NOIP2014 联合权值

<题目链接>


存图,对于每一个点 \(u\),遍历它的所有邻接点。以 \(u\) 为中转点的点对中,\((x,y)\) 的联合权值 \(w_x \cdot w_y\) 最大,当且仅当 \(x\) 与 \(y\) 的点权在 \(u\) 的所有邻接点中是前两大的。

成功尝试内嵌 HTML 控制背景色,开心。

每遍历一个点 \(v\),它对联合权值之和 \(\mathrm{sum}\) 的贡献,等于其点权 \(w_v\) 乘目前已遍历点的点权和 \(\mathrm{NodeSum}\) 再乘 \(2\),即 \(\mathrm{sum} += 2w_v \cdot \mathrm{NodeSum}\)。(取模省略,代码中体现)

然后一边求 \(u\) 的邻接点中的最大点权 \(\mathrm{max1}\) 和次大点权 \(\mathrm{max2}\),一边更新 \(\mathrm{NodeSum}\)(教练跟我说更新这个的过程叫什么前序和优化)。

\(u\) 的邻接点遍历完毕后,\(\mathrm{sum}\) 也更新完毕了。至于最大联合权值 \(\mathrm{ans}\),比较当前 \(\mathrm{ans}\) 与此次遍历求出的 \(\mathrm{max1} \cdot \mathrm{max2}\),更新最大值即可。

最终输出 \(\mathrm{ans}\) 与 \(\mathrm{sum}\) 即可。

#include <algorithm>
#include <cstdio>
using std::max;
const int MAXN=2000010,P=10007;
int n,ans,sum,w[MAXN];
struct Edge
{
int to;
Edge *next;
Edge(int to,Edge* next):to(to),next(next){}
~Edge(void)
{
if(next!=nullptr)
delete next;
}
}*head[MAXN];
void Initialize(void)
{
for(int i=1;i<=n;++i)
head[i]=nullptr;
}
void AddEdges(int u,int v)
{
head[u]=new Edge(v,head[u]);
head[v]=new Edge(u,head[v]);
}
void Solve(int u)
{
int NodeSum=0,max1=0,max2=0;
for(Edge *i=head[u];i!=nullptr;i=i->next)
{
int v=i->to;
sum=(sum+(NodeSum*w[v]<<1))%P;
if(max1<w[v])
{
max2=max1;
max1=w[v];
}
else
max2=max(max2,w[v]);
NodeSum=(NodeSum+w[v])%P;
}
ans=max(ans,max1*max2);
}
void Destroy(void)
{
for(int i=1;i<=n;++i)
delete head[i];
}
int main(int argc,char** argv)
{
scanf("%d",&n);
for(int i=1,u,v;i<n;++i)
{
scanf("%d %d",&u,&v);
AddEdges(u,v);
}
for(int i=1;i<=n;++i)
scanf("%d",&w[i]);
for(int i=1;i<=n;++i)
Solve(i);
printf("%d %d\n",ans,sum);
return 0;
}

谢谢阅读。

[Luogu 1351] NOIP2014 联合权值的更多相关文章

  1. NOIP2014 联合权值

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

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

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

  3. NOIP2014联合权值

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

  4. [NOIP2014]联合权值 题解

    题目大意: 有一棵树,求距离为2的点权的乘积的和以及最大值. 思路: 枚举每一个点,则与其相邻的点互为距离为2的点.该部分的最大值为点权最大的两个点的积,和为点的权值和的平方减去每个点的平方,这样每条 ...

  5. luogu1351 [NOIp2014]联合权值 (dfs)

    有两种情况:一个点到它的父亲的父亲(要算两次).一个点的子节点之间互相到达 #include<bits/stdc++.h> #define pa pair<int,int> # ...

  6. NOIP 2004 联合权值

    洛谷 P1351 联合权值 洛谷传送门 JDOJ 2886: [NOIP2014]联合权值 D1 T2 JDOJ传送门 Description 无向连通图 G有 n个点,n-1条边.点从 1到 n依次 ...

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

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

  8. luogu 1351 联合权值

    联合权值 题目大意 给你一个图,有\(n-1\)条边,距离均为\(1\),每距离为\(2\)的两个点的联合权值为\(W_u \times W_v\),求联合权值的最大值和联合权值总和. solutio ...

  9. [NOIp2014] luogu P1351 联合权值

    哎我博 4 了. 题目描述 无向连通图 GGG 有 nnn 个点,n−1n−1n−1 条边.点从 111 到 nnn 依次编号,编号为 iii 的点的权值为 WiW_iWi​,每条边的长度均为 111 ...

随机推荐

  1. 智能客服 对话实现--python aiml包

    利用了python的aiml包进行应答 什么是AIML? AIML是Richard Wallace开发的. 他开发了一个叫A.L.I.C.E(Artificial Linguistics Intern ...

  2. Pyhont:内建函数enumerate

    1.enumerate的中文意思 2.enumerate参数为可遍历的变量,如字符串.列表等,其返回值为enumerate类. 3.enumerate多用在for循环中得到计数 . [注]:若在for ...

  3. OpenFlow协议

    功能 1.0版本Openflow:控制器通过Openflow协议与交换机建立了安全通道(Sceure Channel),下发流表. 1.3版本Openflow:多控制器,多流表. 用于实现Contro ...

  4. Alpha 冲刺5

    队名:日不落战队 安琪(队长) 今天完成的任务 组织第五次站立式会议(半冲刺总结交流会). 完成草稿箱前端界面. 明天的计划 回收站前端界面. 尝试去调用数据. 还剩下的任务 信息修改前端界面. 遇到 ...

  5. java下执行mongodb

    1.1连单台mongodb Mongo mg = newMongo();//默认连本机127.0.0.1  端口为27017 Mongo mg = newMongo(ip);//可以指定ip 端口默认 ...

  6. freemarker中空值 null的处理 ?exists ?if_exists ?default(“”)

    exists:由空值测试运算符的引入,它被废弃了. exp1?exists 和 exp1??是一样的, ( exp1)?exists 和(exp1)??也是一样的. if_exists:由默认值运算符 ...

  7. libcurl底层调用逻辑

    libcurl就不多介绍了,一个支持HTTP,FTP,SMTP等协议的网络库 只涉及multi部分,easy部分就不提了. 两个线程,一个负责添加HTTP请求,另一个轮询,负责处理每一个请求 Thre ...

  8. phaser2 微信小游戏入手

    phaser2小游戏基本没什么什么问题,可以下常开发游戏.如果遇到什么问题, 可以提出来共同讨论. 下面来个例子 import './lib/weapp-adapter'; import Phaser ...

  9. Ubuntu 10.04 配置TQ2440交叉编译环境

    一.解压交叉编译开发工具包  EABI_4.3.3_EmbedSky_20100610.tar.bz2 $ sudo mkdir /opt/EmbedSky/     $ sudo cp -r /ho ...

  10. 【BZOJ2306】幸福路径(动态规划,倍增)

    [BZOJ2306]幸福路径(动态规划,倍增) 题面 BZOJ 题解 不要求确切的值,只需要逼近 显然可以通过移动\(\infty\)步来达到逼近的效果 考虑每次的一步怎么移动 设\(f[i][j]\ ...