题目来源:洛谷P1351

思路

由题意可得图为一棵树

在一棵树上距离为2的两个点有两种情况

  • 当前点与其爷爷
  • 当前点的两个儿子

当情况为当前点与其爷爷时比较好操作

只需要在传递时不仅传递父亲 还传递爷爷即可

当情况为两个儿子时

其实我们只需要的是所有儿子中比较大的两个

所以我们在遍历当前点的所有儿子时取出最大值和次大值即可

最后的最大值为两种情况中的最大值

最后的答案为当前点的所有儿子权值的平方减去每个儿子本身的平方(容斥原理)+2*最大*次大(乘以2是因为每种情况有正反两种)

代码

#include<iostream>
using namespace std;
#define maxn 200020
#define mod 10007
int n,cnt,ans,Max;
int h[maxn],w[maxn];
struct Edge
{
int to;
int next;
}e[maxn*];
void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=h[u];
h[u]=cnt;
}
void dfs(int u,int fa,int gr)//u为当前点 fa为父亲 gr为爷爷
{
int m1=,m2=,sum=,num=;//m1为最大 m2为次大 sum为所有儿子的权值 num为所有儿子本身的平方
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].to;
if(v==fa) continue;//如果是父亲就跳过
sum=(sum+w[v])%mod;//计算所有儿子权值
num=(num+w[v]*w[v]%mod)%mod;//计算儿子本身平方
if(w[v]>m1)//判断最大和次大
{
m2=m1;
m1=w[v];
}
else if(w[v]>m2)
m2=w[v];
dfs(v,u,fa);
}
Max=max(Max,max(m1*m2,w[u]*w[gr]));//注意最大值不用取mod
ans=(ans+(sum*sum%mod-num+mod)%mod+w[u]*w[gr]*%mod)%mod;//总值计算
}
int main()
{
cin>>n;
for(int i=;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
for(int i=;i<=n;i++) cin>>w[i];
dfs(,,);
cout<<Max<<" "<<ans;
}

【题解】洛谷P1351 [NOIP2014TG] 联合权值(树形结构+DFS)的更多相关文章

  1. 【洛谷P1351】联合权值

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

  2. 洛谷 题解 P1351 【联合权值】

    Problem P1351 [联合权值] record 用时: 99ms 空间: 13068KB(12.76MB) 代码长度: 3.96KB 提交记录: R9883701 注: 使用了 o1 优化 o ...

  3. $Noip2014/Luogu1351$ 联合权值 树形

    $Luogu$ $Description$ 给定一棵树,每两个距离为$2$的点之间可以产生"联合权值","联合权值"定义为这两个数的乘积.求最大的联合权值以及所 ...

  4. 洛谷P1351 联合权值(树形dp)

    题意 题目链接 Sol 一道很简单的树形dp,然而被我写的这么长 分别记录下距离为\(1/2\)的点数,权值和,最大值.以及相邻儿子之间的贡献. 树形dp一波.. #include<bits/s ...

  5. 洛谷P1908 逆序对 [权值线段树]

    题目传送门 逆序对 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的 ...

  6. 洛谷 P1351 联合权值 —— 树形DP

    题目:https://www.luogu.org/problemnew/show/P1351 树形DP,别忘了子树之间的情况(拐一下距离为2). 代码如下: #include<iostream& ...

  7. 洛谷 1351 联合权值——树形dp

    题目:https://www.luogu.org/problemnew/show/P1351 对拍了一下,才发现自己漏掉了那种拐弯的情况. #include<iostream> #incl ...

  8. 洛谷 P1351 联合权值 题解

    P1351 联合权值 题目描述 无向连通图 \(G\) 有 \(n\) 个点,\(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\)​,每条 ...

  9. 『题解』洛谷P1351 联合权值

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 无向连通图\(\mathrm G\)有\(n\)个点,\(n - 1\)条边.点从 ...

随机推荐

  1. SQL2008使用with求余额表,流水账方式

    1.先准备数据,将要求余额的表数据插入临时表 SELECT Serial, VoucherNum, SubjectNum, SubjectName, Direction, Amount INTO #T ...

  2. Ascii码 unicode码 utf-8编码 gbk编码的区别

    ASCII码: 只包含英文,数字,特殊符号的编码,一个字符用8位(bit)1字节(byte)表示 Unicode码: 又称万国码,包含全世界所有的文字,符号,一个字符用32位(bit)4字节(byte ...

  3. css3动画基础详解(@keyframes和animation)

    我们经常会看到CSS3能制作出很炫酷的动画效果,但是自己却只能做一些简单的.原因是对CSS3动画只知其一,不知其二.最近正好有做动画的项目,于是花时间将css3动画做了一个探究之旅,记录在册. 动画是 ...

  4. 2-5 Sass 的 @ 规则

    @import Sass 支持所有 CSS3 的 @ 规则, 以及一些 Sass 专属的规则,也被称为"指令(directives)". 这些规则在 Sass 中具有不同的功效,详 ...

  5. Android sqlite日期存储

    SQLite日期类型是以TEXT.REAL和INTEGER类型分别不同的格式表示的,对应如下:TEXT: "YYYY-MM-DD HH:MM:SS.SSS"REAL: 以Julia ...

  6. android测试Code

    <!--android:layout_alignParentTop="true"--><com.koooke.platform.View.CenterImage ...

  7. BEM,SASS,LESS,bootstrap:如何有效地将这些方法,工具和框架聪明地整合?

    https://medium.com/@andersonorui_/bem-sass-and-bootstrap-9f89dc07d20f Bootstrap是一个“HTML,CSS和Javascri ...

  8. [使用经验]cocostudio UI编辑器的裁剪

    日志-2015/03/16 描述:在程序使用UI编辑器导出文件的时候,该panel中大于panel的部分都没有显示出来,例如人物,一些特效等 原因:UI编辑器panel都勾上了裁剪 解决:在编辑器中把 ...

  9. ZT sigprocmask,sigpending函数

    sigprocmask,sigpending函数 分类: LINUX 2012-02-02 16:39 905人阅读 评论(0) 收藏 举报 signalredhatnulllinux [sigpro ...

  10. 使用SAP C4C rule editor动态控制UI上某个按钮是否显示

    假设我想根据Sales Order的outbound delivery字段来控制这个Trigger Delivery按钮的动态显示: 首先Adapt->Edit Master Layout进入K ...