• 【LG3237】[HNOI2014]米特运输


    题面

    洛谷

    题解

    img

    代码

    #include <iostream> 
    #include <cstdio> 
    #include <cstdlib> 
    #include <cstring> 
    #include <cmath> 
    #include <algorithm> 
    using namespace std;
    inline int gi() {
        register int data = 0, w = 1;
        register char ch = 0;
        while (!isdigit(ch) && ch != '-') ch = getchar(); 
        if (ch == '-') w = -1, ch = getchar();
        while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
        return w * data; 
    } 
    const double eps = 1e-8;
    const int MAX_N = 5e5 + 5; 
    struct Graph { int to, next; } e[MAX_N << 1];
    int fir[MAX_N], e_cnt;
    void clearGraph() { memset(fir, -1, sizeof(fir)); } 
    void Add_Edge(int u, int v) { e[e_cnt] = (Graph){v, fir[u]}, fir[u] = e_cnt++; } 
    int N, a[MAX_N], deg[MAX_N]; 
    double f[MAX_N];
    
    void dfs(int x, double s) {
        f[x] = s + log(a[x]);
        for (int i = fir[x]; ~i; i = e[i].next) dfs(e[i].to, s + log(deg[x]));
    }
    
    int main() {
    #ifndef ONLINE_JUDGE
    	freopen("cpp.in", "r", stdin); 
    #endif
    	clearGraph(); 
        N = gi(); 
        for (int i = 1; i <= N; i++) a[i] = gi(); 
        for (int i = 1, u, v; i < N; i++) u = gi(), v = gi(), ++deg[u], Add_Edge(u, v); 
        dfs(1, 0);
        sort(&f[1], &f[N + 1]); 
        int ans = 1; 
        for (int i = 2, cnt = 1; i <= N; i++) { 
            if (f[i] - f[i - 1] <= eps) ans = max(ans, ++cnt); 
            else cnt = 1; 
        } 
        printf("%d
    ", N - ans); 
        return 0;
    } 
    
  • 相关阅读:
    【SDOI2014】数表
    【洛谷P4735】最大异或和
    FFT学习笔记
    【SHOI2008】堵塞的交通
    HDU 1754 I Hate It 线段树
    hdu 1166 敌兵布阵 ( 线段树或者树状数组)
    hdu 5339 Untitled dfs
    The mook jong
    hdu 5363 Key Set 快速幂
    HDU 1983 Kaitou Kid
  • 原文地址:https://www.cnblogs.com/heyujun/p/10406332.html
Copyright © 2020-2023  润新知