联合权值

                洛谷中可找到


题目传送门https://www.luogu.org/problemnew/show/P1351

这题我就得了70分(TLE)  GG了

就是遍历它孩子的孩子(爷爷和孙子),然后相乘;

ps:这样会有很多重复,TLE

 #include<cstdio>
#include<iostream>
#define maxn 200000+10
using namespace std;
int max(int x,int y)
{
return x>y?x:y;
}
int n;
struct ii{
int u,v,nxt;
}a[maxn*];
int w[maxn];
int head[maxn];
int o;
inline void add(int x,int y)
{
a[++o].u=x;
a[o].v=y;
a[o].nxt=head[x];
head[x]=o;
}
int main()
{
// freopen("link.in","r",stdin);
// freopen("link".out,"w",stdout);
scanf("%d",&n);
for(int i=,x,y;i<n;++i)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
int jl=;
int zui=,he=,wkk=;
for(int i=;i<=n;++i)
{
for(int j=head[i];j;j=a[j].nxt)
{
for(int zz=head[a[j].v];zz;zz=a[zz].nxt)
{
if(a[zz].v!=i)
{
wkk=w[a[zz].v]*w[i];
zui=max(zui,wkk);
he+=wkk;
he%=;
}
}
}
}
printf("%d %d",zui,he);
return ;
}


正解

#include<iostream>
#include<cstdio>
#define maxn 300000+10
using namespace std;
int n;
int max(int x,int y)
{
return x>y?x:y;
}//手写max,fast struct ii{
int v,nxt;
}a[];//链式强向星存图1
int head[];
int w[];
int he,ma;//ans int o;//存图
void add(int x,int y)
{
a[++o].v=y;
a[o].nxt=head[x];
head[x]=o;
} int main()
{
cin>>n;
int x,y;
for(int i=;i<=n-;++i)
{
scanf("%d%d",&x,&y);//输入
add(x,y);add(y,x);//正反存一遍
}
for(int i=;i<=n;++i)
{
scanf("%d",&w[i]);//输入价值
}
int sum,zui;//sum是孩子加起来的和,zui是孩子中最大的
for(int i=;i<=n;++i)
{
sum=(zui=w[a[head[i]].v])%;//初始值
for(int j=a[head[i]].nxt;j;j=a[j].nxt)//从第二个孩子开始遍历
{
//这一部分是求和
he=(he+sum*w[a[j].v])%;//乘法结合律
sum=(sum+w[a[j].v])%;//更新孩子和
//这一部分是求最大值
ma=max(ma,zui*w[a[j].v]);//更新最大值
zui=max(zui,w[a[j].v]);//更新孩子中的最大值
//因为这是最后更新的,所以不用担心出现最大值和自己相乘
}
} printf("%d %d",ma,he*%);//别忘了he*2
return ;
}

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

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

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

  2. P1351 联合权值(树形dp)

    P1351 联合权值 想刷道水题还交了3次.....丢人 (1.没想到有两个点都是儿子的状况 2.到处乱%(大雾)) 先dfs一遍处理出父亲$fa[x]$ 蓝后再一遍dfs,搞搞就出来了. #incl ...

  3. 【树形DP】【P1351】 【NOIP2014D1T2】联合权值

    传送门 Description 无向连通图 \(G\) 有 \(n\) 个点, \(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\) ,每 ...

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

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

  5. Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - Vijos1906 题意概括 有一棵树,每一个节点都有一个权值w[i].下面说的x,y都是该树中的节点. 对于 ...

  6. [noip2014day1-T2]联合权值

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

  7. 「NOIP2014」「Codevs3728」 联合权值(乱搞

    3728 联合权值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 输入描述 Input Description 输出描述 Ou ...

  8. P1351 联合权值[鬼畜解法]

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

  9. Codevs 3728 联合权值

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

随机推荐

  1. 学习计划 mysql 整数类型后面的数字,是什么意思?

    Mysql中定义整数类型的数字,是指定这个字段的长度么? 比如 INT(10) 10代表10个字节么?还是只能存储10为长度的数字内容? 今天本来想学习下字符类型,一下子发现了这个,感觉好有趣. -- ...

  2. lmathlib文件

    lua的math库是通过lua扩展而来,主要对系统math库进行了一次封装,以供lua使用,一般可以从lmathlib文件开始阅读源码. //绝对值 static int math_abs (lua_ ...

  3. Django中配置用Redis做缓存和session

    django-redis文档: http://django-redis-chs.readthedocs.io/zh_CN/latest/# 一.在Django中配置 # Django的缓存配置 CAC ...

  4. __getattr__,settr

    __getattr__  如果属性查找在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数, 如果没有定义这个函数,那么抛出AttributeError异常. ...

  5. 上传指定url文件到阿里云oss

    好处是不用下载到本地,也不用删除本地文件.省事! 先下载阿里云官方代码  https://github.com/aliyun/aliyun-oss-csharp-sdk 引用其中的 aliyun-os ...

  6. svg绘图工具raphael.js的使用

    1.raphael.js svg画图的开源库,支持IE8+ 官方api: http://dmitrybaranovskiy.github.io/raphael/reference.html Githu ...

  7. 关于Redis-存Long取Integer类型转换错误的问题;String对象被转义的问题

    背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理. 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误. 2.String对象的反序列化问题,直接在Redis服 ...

  8. Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...

  9. C/C++之内存分配

    一.编译时与运行时的内存情况1.编译时不分配内存编译时是不分配内存的.此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确.所以声明是给编译器看的,聪明的编译器能根据声明帮你识别错误.2 ...

  10. Oracle和sql server中复制表结构和表数据的sql语句

    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...