BZOJ3573 [Hnoi2014]米特运输 【贪心】

题目链接

BZOJ3573

题解

题目又臭又长系列

题意:修改尽量少的点权,使得:

①同个节点的所有儿子点权相同

②任意非叶节点权值等于其儿子权值之和

容易发现一旦任意一个点权值确定,整棵树权值就确定

一个比较简单的想法是枚举根节点权值

但我们可以通过计算出每个节点如若保留原值,根节点会是什么值

如果两个节点能同时不变,当且仅当它们对应根节点权值相等

我们算出来排序选择权值最多的那一个就好了

直接乘会爆\(long long\),可使用\(log\)转化为加法

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
#define eps 1e-9
using namespace std;
const int maxn = 500005,maxm = 1000005,INF = 1000000000;
inline int read(){
    int out = 0,flag = 1; char c = getchar();
    while (c < 48 || c > 57){if (c == ‘-‘) flag = -1; c = getchar();}
    while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
    return out * flag;
}
int tot;
double H[maxn];
int n,val[maxn],de[maxn];
int h[maxn],ne = 1;
struct EDGE{int to,nxt;}ed[maxm];
inline void build(int u,int v){
    ed[++ne] = (EDGE){v,h[u]}; h[u] = ne;
    ed[++ne] = (EDGE){u,h[v]}; h[v] = ne;
    de[u]++; de[v]++;
}
double v[maxn];
int fa[maxn];
void dfs(int u){
    if (u == 1) v[u] = log(1);
    else v[u] = v[fa[u]] + log(fa[u] == 1 ? de[fa[u]] : de[fa[u]] - 1);
    H[++tot] = v[u] + log(val[u]);
    Redge(u) if ((to = ed[k].to) != fa[u]){
        fa[to] = u; dfs(to);
    }
}
int main(){
    n = read();
    REP(i,n) val[i] = read();
    for (int i = 1; i < n; i++) build(read(),read());
    dfs(1);
    int ans = 0,cnt = 0;
    sort(H + 1,H + 1 + tot);
    for (int i = 1; i <= tot; i++){
        if (fabs(H[i] - H[i - 1]) > eps) ans = max(ans,cnt),cnt = 1;
        else cnt++;
    }
    ans = max(ans,cnt);
    printf("%d\n",n - ans);
    return 0;
}

原文地址:https://www.cnblogs.com/Mychael/p/9065552.html

时间: 2024-10-03 23:18:17

BZOJ3573 [Hnoi2014]米特运输 【贪心】的相关文章

bzoj3573[Hnoi2014]米特运输

http://www.lydsy.com/JudgeOnline/problem.php?id=3573 好吧,虽然这是day1最后一题,但却是最水的一题....(前提:看懂题目) 仔细看题! 仔细看题! 仔细看题! 看懂题后就知道设第$i$个点的儿子节点的个数为$degree[i]$,容量为$A[i]$,我们要修改最少的点的容量,使得每个点$i$的儿子的容量均为$\frac{A[i]}{degree[i]}$ 我们发现如果一个点的容量是确定的,那么整个树的容量都是确定的 我们记第$i$个点的所

【BZOJ-3573】米特运输 树形DP

3573: [Hnoi2014]米特运输 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1023  Solved: 604[Submit][Status][Discuss] Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.    D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由N-1条单向高速通道连接起来,构成一棵以1号城市(

【BZOJ 3573】 [Hnoi2014]米特运输

3573: [Hnoi2014]米特运输 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 618 Solved: 359 [Submit][Status][Discuss] Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由N-1条单向高速通道连接起来,构成一棵以1号城市(首部)为

[HNOI2014]米特运输

题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由N-1条单向高速通道连接起来,构成一棵以1号城市(首部)为根的树,高速通道的方向由树中的儿子指向父亲.树按深度分层:根结点深度为0,属于第1层:根结点的子节点深度为1,属于第2层:依此类推,深度为i的结点属于第i+l层. 建好高速通道之后,D星人开始考虑如何具体地储存和传输米特资源.由于发展程

[BZOJ 3573][Hnoi2014]米特运输(乱搞)

Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由N-1条单向高速 通道连接起来,构成一棵以1号城市(首部)为根的树,高速通道的方向由树中的儿子指向父亲.树按深度分层: 根结点深度为0,属于第1层:根结点的子节点深度为1,属于第2层:依此类推,深度为i的结点属于第i+l层.建好 高速通道之后,D星人开始考虑如何具体地储存和传输米

bzoj 3573: [Hnoi2014]米特运输

一个根节点的权值会决定一棵树全部的权值是显然的(一开始也想,枚举一下??呵呵,这么sb的做法怎么可能对,然后就想各种各样的乱搞) 在扒到题解之后,发现还还有取log这个奇巧淫技,, 那么这样对每个点算一下,这个点的权值不变的话,根节点的权值会是多少,那么找一下相同权值最多的就好 (这种乘法会炸的可以尝试去log,,,) 1 #include <bits/stdc++.h> 2 #define LL long long 3 #define lowbit(x) x&(-x) 4 #defi

【BZOJ】3573: [Hnoi2014]米特运输

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3573 屁话一堆,就是说: 1.一棵树中的每个点的每个儿子的权值之和要等于这个点的权值 2.一棵树中的每个点的每个儿子的权值相等. 所以,考虑确定一个点即确定的整个树的每个点的权值,但是我们受限于数据范围又不能枚举每一个点,所以枚举每一个点,考虑这个点的权值不变的话根节点的权值会是多少,这个是可以DP的,然后取个众数即可. 当然,权值过大所以需要一发HASH. 1 #include<ios

洛谷 P3237 [HNOI2014]米特运输

这其实是超级大水题,难度不及一道提高组的dp,如果读懂了题面... 好吧我读懂了题面,然而并不知道1号节点是否一定要装满... (根据做题的情况来看1号也是要装满的,尽管不进行能量收集) 然而为什么我还是不会做呢.... 稍微观察一下就可以发现: 根节点容量确定后,整棵树容量都可以确定. 因此如果要保证树上某一节点的容量不进行修改,那么根节点必须为某一确定容量 记ncn[i]为i节点的子节点个数,那么对于原来容量为a[i]的节点i,如果不能修改,则要求根节点容量为 a[i]*(i到根节点的路径上

BZOJ 3573 米特运输

Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.    D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由N-1条单向高速通道连接起来,构成一棵以1号城市(首部)为根的树,高速通道的方向由树中的儿子指向父亲.树按深度分层:根结点深度为0,属于第1层:根结点的子节点深度为1,属于第2层:依此类推,深度为i的结点属于第i+l层.    建好高速通道之后,D星人开始考虑如何具体地储存