「NOIP2014」「Codevs3728」 联合权值(乱搞
3728 联合权值







题解
这(在洛谷上)都是些什么标签?LCA?dp?(MAX问号脸
随意钦定一个点当根节点,转化成有根树处理。
对于dfs到的每个点,$sum$加上$x$和$fa[fa[x]]$的点权乘积$*2$($(x,y)$和$(y,x)$要算两次
然后在当前这个点的所有儿子之间乘一下,加到$sum$里。
当然也顺手跟$mac$取个$max$。
然后在处理每个点的儿子之间的恩怨时,很多人用的是$O(n^2)$的两个for。
菊花图会直接让你们TLE的啊qwq,但是这数据蛮水的,没卡他们qaq
所以我写的时候怕T,做了一丢丢优化,搞到了$O(n)$。
反正也没什么用就是了。
/*
qwerta
P1351 联合权值
Accepted
100
代码 C++,1.41KB
提交时间 2018-10-09 11:26:08
耗时/内存
170ms, 7356KB
*/
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int MAXN=+;
struct emm{
int e,f;
}a[*MAXN];
int h[MAXN];
int tot=;
void con(int u,int v)
{
a[++tot].f=h[u];
h[u]=tot;
a[tot].e=v;
a[++tot].f=h[v];
h[v]=tot;
a[tot].e=u;
return;
}
int w[MAXN];
int d[MAXN],fa[MAXN];
const int mod=;
long long sum=,ans=;
int st[MAXN];
void dfs(int x)
{
if(fa[fa[x]])
{
sum+=*w[x]*w[fa[fa[x]]];
sum%=mod;
ans=max(ans,(long long)w[x]*w[fa[fa[x]]]);
}
int tos=;
long long sumn=;
int mac1=,mac2=;
for(int i=h[x];i;i=a[i].f)
if(!d[a[i].e])
{
fa[a[i].e]=x;
d[a[i].e]=d[x]+;
st[++tos]=a[i].e;
sumn+=w[a[i].e];
if(w[a[i].e]>=mac1){mac2=mac1,mac1=w[a[i].e];}
else if(w[a[i].e]>mac2){mac2=w[a[i].e];}
}
ans=max(ans,(long long)mac1*mac2);
for(int i=;i<=tos;++i)
{
sum+=(sumn-w[st[i]])*w[st[i]];
sum%=mod;
}
//cout<<x<<" "<<ans<<" "<<sum<<endl;
for(int i=h[x];i;i=a[i].f)
if(fa[a[i].e]==x)
dfs(a[i].e);
return;
}
int main()
{
//freopen("a.in","r",stdin);
int n;
scanf("%d",&n);
for(int i=;i<n;++i)
{
int u,v;
scanf("%d%d",&u,&v);
con(u,v);
}
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
int s=min(n,);
d[s]=;
dfs(s);
cout<<ans<<" "<<sum%mod;
return ;
}
「NOIP2014」「Codevs3728」 联合权值(乱搞的更多相关文章
- NOIP2014提高组第二题联合权值
还是先看题吧: 试题描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...
- 【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值
不难发现,树中与某个点距离为2的点只可能是它的父亲的父亲.儿子的儿子 或者 兄弟,分类讨论一下即可. 只有对于兄弟我们不能暴力搞,维护一下每个节点的所有儿子的前缀和.前缀MAX就行了. #includ ...
- 「NOIP2014」联合权值
传送门 Luogu 解题思路 因为这是一棵树,所以说两个点如果能产生联合权值,那么它们就只能通过唯一的一个中转点来匹配,所以我们就枚举这个中转点. 但是我们又会发现,如果把每个点周围的点抠出来进行两两 ...
- 【学术篇】luogu1351 [NOIP2014提高组] 联合权值
一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...
- [Luogu 1351] NOIP2014 联合权值
[Luogu 1351] NOIP2014 联合权值 存图,对于每一个点 \(u\),遍历它的所有邻接点.以 \(u\) 为中转点的点对中,\((x,y)\) 的联合权值 \(w_x \cdot w_ ...
- [NOIP2014提高组]联合权值
题目:洛谷P1351.Vijos P1906.codevs3728.UOJ#16. 题目大意:有一个无向连通图,有n个点n-1条边,每个点有一个权值$W_i$,每条边长度为1.规定两个距离为2的点i和 ...
- [NOIP2014] 提高组 洛谷P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- Noip2014 提高组 T2 联合权值 连通图+技巧
联合权值 描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的 ...
- NOIP2014 联合权值
2.联合权值 (link.cpp/c/pas) [问题描述] 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每条边的长度均为1.图上两点(u, v)的距离定义为u ...
随机推荐
- K-L变换和 主成分分析PCA
一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hot ...
- C#中的抽象类和子类
namespace FreeDlder { // 抽象类 public abstract class Dld { protected Form1 mainGui; protected String i ...
- 算法 binary search
// ------------------------------------------------------------------------------------------------- ...
- C++11 并发指南四(<future> 详解三 std::future & std::shared_future)(转)
上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...
- iOS 私有库的使用
最近项目说要用私有库 主要过程 创建两个库: 索引库 组件库 组件库 用git操作 比如更新代码 push 打tag等 索引库 存放组件的描述信息 也就是 .spec文件 这个文件和 ...
- H5实现多图片预览上传,可点击可拖拽控件介绍
版权声明:欢迎转载,请注明出处:http://blog.csdn.net/weixin_36380516 在做图片上传时发现一个蛮好用的控件,支持多张图片同时上传,可以点击选择图片,也可以将图片拖拽到 ...
- viewpager 跳转到指定页面
viewPager.setCurrentItem(getUserIndex(userId)); seCurrentItem是定位到指定页面参数是position
- IOS UIWebView 随记
UIWebView中加载的网页尺寸太大,如何让网页适应屏幕大小 webview.scalesPageToFit = YES;
- eclipse中run as无run as server选项的解决方案
在项目->右击->Properties->Project Facets->Modify Project,选择Java和DynamicWeb Module
- 01 json方式封装通信接口
新建一个json_api.php<?php class Response{ /** *按json方式输出通信 *@param integet $code 状态码 *@param string $ ...