博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷1351 联合权值
阅读量:4965 次
发布时间:2019-06-12

本文共 2031 字,大约阅读时间需要 6 分钟。

洛谷1351 联合权值



交题记录

20:47 第1次提交 70'

输入文件无法下载(lg大坑比),下载了输出发现第二问萎了,怀疑是取膜的问题。
20:50 第2次提交 70'
我就笑笑不说话。。。两份代码只差了一句取膜,结果新交的时间空间都变大,然后从AWAAAAAWW变成AWAAAWAAWA
咦,输出爆负了。。。
取了膜的减一个没取膜的是不是会爆负。。。
20:53 第三次提交 AC
把取膜改个位置就A了。。。
是不是边做题编写博客欧气强些。。。
望着dalao们100~200+ms而我88ms我好骄傲。。。
最后吐槽一句这为什么是dp题。。。


题解

第一反应

距离为2的点,只会是两个兄弟,或者一个是另一个的子节点的子节点。

更进一步:兄弟节点情况的优化

父子的很好算。

计算兄弟节点的联合权值?

  • \(O(n^2)\)枚举
  • 还有啥???

先把\(O(n^2)\)的算法列出来:

for i := 1 to n    for j := 1 to n        if(i<>j)then            {用w[i]*w[j]更新答案}

别问我为什么用Pascal。。。

总之,每一个点都会和其他兄弟配对一次。
所以点\(a\)对答案的贡献为
\[ \sum_{i=其他兄弟}w[a]*w[i] \]
\[ =w[a]*\sum_{i=其他兄弟}w[i] \]
\[ =w[a]*(\sum_{i=包括a的所有兄弟}w[i]-w[a]) \]
于是第二问解决了。。。就在这里取膜失误身败名裂。。。
当然,对于第一问,就是权值最大的两个孩子嘛。。。
现在怎么优化就显而易见了,然后可以过了。


Code

// It is made by XZZ#include
#include
#include
using namespace std;#define rep(a,b,c) for(rg int a=b;a<=c;a++)#define drep(a,b,c) for(rg int a=b;a>=c;a--)#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])#define il inline#define rg register#define vd voidtypedef long long ll;il int gi(){ rg int x=0,f=1;rg char ch=getchar(); while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f;}const int maxn=200100,maxm=maxn<<1;int w[maxn];int fir[maxn],nxt[maxm],dis[maxm],id;il vd add(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}int Max=0,Sum=0,mod=10007;il vd dfs(int now,int fa,int grandfa){ Max=max(Max,w[now]*w[grandfa]); Sum=(Sum+w[now]*w[grandfa]*2)%mod; int sum=0; erep(i,now)if(dis[i]^fa){ sum+=w[dis[i]]; dfs(dis[i],now,fa); } int max1=0,max2=0; erep(i,now)if(dis[i]^fa){ Sum=(Sum+w[dis[i]]*((sum-w[dis[i]])%mod))%mod; if(w[dis[i]]>max1)max2=max1,max1=w[dis[i]]; else if(w[dis[i]]>max2)max2=w[dis[i]]; } Max=max(Max,max1*max2);}int main(){ int n=gi(),u,v; rep(i,2,n)u=gi(),v=gi(),add(u,v),add(v,u); rep(i,1,n)w[i]=gi(); dfs(1,0,0); printf("%d %d\n",Max,Sum); return 0;}

转载于:https://www.cnblogs.com/xzz_233/p/7425250.html

你可能感兴趣的文章
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>