不难发现,树中与某个点距离为2的点只可能是它的父亲的父亲、儿子的儿子 或者 兄弟,分类讨论一下即可。

只有对于兄弟我们不能暴力搞,维护一下每个节点的所有儿子的前缀和、前缀MAX就行了。

 #include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define N 200001
#define MOD 10007
int n;
vector<int>G[N],son[N];
typedef long long ll;
typedef vector<int>::iterator ITER;
int x,y,fa[N],dep[N],maxv,sumv,w[N];
void dfs(int U)
{
for(ITER it=G[U].begin();it!=G[U].end();it++)
if((*it)!=fa[U])
{
fa[*it]=U;
dep[*it]=fa[U]+;
son[U].push_back(*it);
dfs(*it);
}
}
void dfs2(int U)
{
if(dep[U]>=) sumv=(sumv+w[U]*w[fa[fa[U]]]%MOD)%MOD;
ll All=,t=;
for(ITER it=son[U].begin();it!=son[U].end();it++) All+=(ll)w[*it];
for(ITER it=son[U].begin();it!=son[U].end();it++)
{
t+=(ll)w[*it];
sumv=(sumv+w[*it]*(int)(All-t)%MOD)%MOD;
dfs2(*it);
}
}
void dfs3(int U)
{
if(dep[U]>=) maxv=max(maxv,w[U]*w[fa[fa[U]]]);
int t=;
for(int i=;i<son[U].size();i++)
{
if(i)
{
t=max(t,w[son[U][i-]]);
maxv=max(maxv,w[son[U][i]]*t);
}
dfs3(son[U][i]);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=;i<=n;i++) scanf("%d",&w[i]);
dfs(); dfs2(); dfs3();
printf("%d %d\n",maxv,(sumv<<)%MOD);
return ;
}

【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值的更多相关文章

  1. NOIP2014提高组第二题联合权值

    还是先看题吧: 试题描述  无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...

  2. 【DFS】【最短路】【spfa】【BFS】洛谷P2296 NOIP2014提高组 day2 T2 寻找道路

    存反图,从终点dfs一遍,记录下无法到达的点. 然后枚举这些记录的点,把他们的出边所连的点也全部记录. 以上这些点都是无法在最短路中出现的. 所以把两个端点都没被记录的边加进图里,跑spfa.BFS什 ...

  3. 【模拟】洛谷 P1328 NOIP2014提高组 day1 T1 生活大爆炸版石头剪刀布

    把所有情况打表,然后随便暴力. #include<cstdio> using namespace std; int n,an,bn,p1,p2; ],b[]; ][]; int ans1, ...

  4. 【暴力】洛谷 P2038 NOIP2014提高组 day2 T1 无线网络发射器选址

    暴力枚举. #include<cstdio> #include<algorithm> using namespace std; ][],d,n,x,y,z,num,ans=-; ...

  5. 洛谷 3953 NOIP2017提高组Day1 T3 逛公园

    [题解] 先建反向图,用dijkstra跑出每个点到n的最短距离dis[i] 设f[u][k]表示dis(u,n)<=mindis(u,n)+k的方案数.对于边e(u,v,w),走了这条边的话需 ...

  6. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

    Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

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

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

  8. 洛谷P1514 [NOIP2010提高组T4]引水入城

    P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...

  9. 【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]

    以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...

随机推荐

  1. hive 动态分区(Dynamic Partition)异常处理

    Changing Hive Dynamic Partition Limits Symptoms: Hive enforces limits on the number of dynamic parti ...

  2. MongoDB加索引

    1.登陆MongoDB, 命令行在MongoDB主目录下执行:mongo -port 27017 2.切换至需要添加索引的db 并授权 use MeetingBooking db.auth({&quo ...

  3. 类名.class 类名.this 详解

    我们知道在java中,一个类在被加载的时候虚拟机就会自动的生成一个这个类的一个Class类型的“类对象”,每个类都对应着一个这样的类对象,通过这个Class类型的类对象,我们就能够使用“内省与反射”机 ...

  4. Spring学习--通过注解配置 Bean (二)

    在 classpath 中扫描组件: 当在组件类上使用了特定的注解之后 , 还需要在 Spring 的配置文件中声明 <context:component-scan>: base-pack ...

  5. HDU1025---(LIS 最长上升子序列 的应用)

    分析: n行 每行包含两个整数p r;意思是p从到r 不能有交叉的路 p刚好从1->n, 可看做下标,到的地方看做值 就转化为了最长上升子序列的问题 此题难点,怎么将其转化为LIS问题 #inc ...

  6. 【POJ 1719】 Shooting Contest (二分图匹配)

    题目链接 把每一列能射的两行和这一列连边,然后跑一边匈牙利就行了. #include <cstdio> #include <cstring> #include <algo ...

  7. python基础===正则表达式(转)

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  8. kernel_read【转】

    转自:http://blog.csdn.net/echoisland/article/details/7101097http://lxr.oss.org.cn/source/fs/exec.c 798 ...

  9. Jmeter4.0启动闪退问题解决方案

    jmeter:4.0 jdk版本:1.8 在Jmeter.bat的最后添加pause可以让Jmeter启动停止: 添加了pause进行强制停止在启动命令页面,查看到Jmeter报错信息如下: 第一次解 ...

  10. 2.docker容器

    docker run 镜像,生成镜像容器,并运行 有以下参数 --name="new name",为容器指定一个新名字 -d:后台运行容器,返回容器id,即启动守护式容器 -i:以 ...