洛谷 题解 P1351 【联合权值】
Problem
record
Solution
60 or 70 pts
直接爆搜,枚举每两个距离为 2 的点,然后记录答案。
写法优异可以拿走 70 pts , 但是 use-v4 几乎铁定是 60 pts 。
代码。。。就不放了,有兴趣的可以看:
60 pts(
use-v4)70 pts(
use-v3)
70⇒100 pts
考虑我们的思路慢在哪儿?
在于组合!
考虑一个菊花图,复杂度几乎是 Θ(n^2) 的,当然慢。
想到乘法交换律(数学老师不要怪我这么长时间才想起你)
这时候考虑任意两个距离为 2 的有序点对一定会有一个中间点,枚举这个点即可,并不需要搜索。复杂度 Θ(n)Θ(n) ,菊花图不会卡
100 pts
思路基本没什么问题了吧!
等等,图 G 上联合权值的最大值呢?
每次记录中间点相邻点中最大的和次大的即可。
没问题了吧?
不,还有问题!
答案要乘 2 !
因为题目可以看成一对有序点对要计算两次。
Code
// luogu-judger-enable-o2
/*
Problem: P1351 联合权值
Author: 航空信奥
Date: 2018/08/18
Upload: Luogu
P.s.: use-v4
*/
#pragma GCC optimize("O1")
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std; namespace AuthorName { /* 防重名 */
template <typename _TpInt> inline _TpInt read();
template <typename _TpInt> inline void write(_TpInt x); # define Online_Judge
# define Max_N
# define Mod vector<vector<int> > g;
int *w;
int maxx = , sum = ; void work(int p)
{
int max_1st = , max_2nd = , temp_sum = ;
for (size_t i = ; i < g[p].size(); i++) {
if (w[g[p][i]] > max_1st) {
max_2nd = max_1st;
max_1st = w[g[p][i]];
}
else if (w[g[p][i]] > max_2nd) {
max_2nd = w[g[p][i]];
}
sum = (sum + temp_sum * w[g[p][i]]) % Mod;
temp_sum = (temp_sum + w[g[p][i]]) % Mod;
}
maxx = max(maxx, max_1st * max_2nd);
} int main()
{
int n;
n = read<int>();
g.resize(n + );
w = new int[n + ];
int u, v;
for (int i = ; i < n; i++) {
u = read<int>();
v = read<int>();
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = ; i <= n; i++) {
w[i] = read<int>();
}
for (int i = ; i <= n; i++) {
work(i);
} write(maxx), putchar(), write((sum << ) % Mod), putchar(); return ;
} #ifdef Online_Judge
char BufferRead[ << ];
int rLen = , rPos = ;
inline char Getchar()
{
if (rPos == rLen) rPos = , rLen = fread(BufferRead, , << , stdin);
if (rPos == rLen) return EOF;
return BufferRead[rPos++];
}
#else
# define Getchar() getchar()
#endif template <typename _TpInt>
inline _TpInt read()
{
register int flag = ;
register char c = Getchar();
while ((c > '' || c < '') && c != '-')
c = Getchar();
if (c == '-') flag = -, c = Getchar();
register _TpInt init = (c & );
while ((c = Getchar()) <= '' && c >= '')
init = (init << ) + (init << ) + (c & );
return init * flag;
} template <typename _TpInt>
inline void write(_TpInt x)
{
if (x < ) {
putchar('-');
write<_TpInt>(~x + );
}
else {
if (x > ) write<_TpInt>(x / );
putchar(x % + '');
}
}
} int main()
{
AuthorName::main();
return ;
}
洛谷 题解 P1351 【联合权值】的更多相关文章
- 洛谷 P1351 联合权值 题解
P1351 联合权值 题目描述 无向连通图 \(G\) 有 \(n\) 个点,\(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\),每条 ...
- P1351 联合权值(树形dp)
P1351 联合权值 想刷道水题还交了3次.....丢人 (1.没想到有两个点都是儿子的状况 2.到处乱%(大雾)) 先dfs一遍处理出父亲$fa[x]$ 蓝后再一遍dfs,搞搞就出来了. #incl ...
- 『题解』洛谷P1351 联合权值
更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 无向连通图\(\mathrm G\)有\(n\)个点,\(n - 1\)条边.点从 ...
- [NOIP2014] 提高组 洛谷P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- 洛谷 P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- 洛谷——P1351 联合权值
https://www.luogu.org/problem/show?pid=1351 题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i , ...
- P1351 联合权值[鬼畜解法]
题目描述 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v 点的最短距离 ...
- luogu P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- [NOIp2014] luogu P1351 联合权值
哎我博 4 了. 题目描述 无向连通图 GGG 有 nnn 个点,n−1n−1n−1 条边.点从 111 到 nnn 依次编号,编号为 iii 的点的权值为 WiW_iWi,每条边的长度均为 111 ...
随机推荐
- Unity 横版2D移动跳跃问题——关于一段跳与二段跳
1.初始条件: 1.角色只绑定一个碰撞体,移动时施加力或给予速度,用跳跃次数JumpTimes或者bool值OnGround判断是否在地面. 2.只用一个tilemap搭建2D场景,因此所有tilem ...
- 导入maven项目pom报错
打开window->preferences->maven->user settings更换settings.xml即可
- 二.整体预览tomcat
一.概述 如果将tomcat内核高度抽象,则它可以看成由连接器(Connector)组件和容器(Container)组件组成,其中Connector组件负责在服务器端处理客户端链接,包括接受客户端链接 ...
- nowcoder 鹏
鹏 时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 化而为鸟,其名为鹏.鹏之背,不知其 ...
- Kotlin Coroutines不复杂, 我来帮你理一理
Coroutines 协程 最近在总结Kotlin的一些东西, 发现协程这块确实不容易说清楚. 之前的那篇就写得不好, 所以决定重写. 反复研究了官网文档和各种教程博客, 本篇内容是最基础也最主要的内 ...
- paper sharing :学习特征演化的数据流
特征演化的数据流 数据流学习是近年来机器学习与数据挖掘领域的一个热门的研究方向,数据流的场景和静态数据集的场景最大的一个特点就是数据会发生演化,关于演化数据流的研究大多集中于概念漂移检测(有监督学习) ...
- 扛把子组20191031-8 alpha week 1/2 Scrum立会报告+燃尽图 06
此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9916 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 ...
- 作业要求20191031-7 beta week 1/2 Scrum立会报告+燃尽图 05
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9915 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩 ...
- Flow入门初识
Flow是facebook出品的JavaScript静态类型检查工具. 由于JavaScript是动态类型语言,它的灵活性也会造成一些代码隐患,使用Flow可以在编译期尽早发现由类型错误引起的bug, ...
- es6 filter方法应用
let arr =[ {title:'aaaa',read:100,hot:true}, {title:'bbbb',read:50,hot:false}, {title:'ccc',read:100 ...