Codeforces Ronda # 525 (Div. 2) D

El significado de los problemas

Elegir un árbol k k un bloque de comunicación, de manera que Σ una yo k \ Frac {\ sum a_i} {k} Lo más grande posible, en base a lo grande, y mucho k k lo más grande posible

solución del problema

Consideramos que, al parecer colección pelotón inversa, si ha elegido k k una, la primera para elegir k + 1 k + 1 .
t = S k - S + w k + 1 t = \ frac {S} {k} - \ frac {S + w} {k + 1}
Comparar el tamaño, porque k w S kw \ leq S
Solicitar t 0 t \ geq 0 , se encuentra k w S kw \ leq S , que se conoce condiciones, solamente un seleccionado que es óptima.
pero k k sea el mejor, de modo que una pluralidad de valor máximo seleccionado de un conjunto de requisitos.

Tratando de i yo es un nodo raíz, el valor máximo de esto debe tomar abajo el punto (mismo conjunto)
tiene claramente:
f i = m a x ( f j , 0 ) f_i = \ sum max (f_j, 0)

Obtener la máxima suma, sin hueso nuevo d p dp , cada vez que el mismo que el máximo y que, k + + k ++ Como la corriente d p dp es igual a infinito negativo, a continuación, vuelta hacia atrás. Eso se puede garantizar que no se solapen.

#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define sf(x) scanf("%d",&x)
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 405000;

int n,A[maxn];
vector<int>G[maxn];
ll dp[maxn],ans=-inf,k;

void dfs1(int u,int f){
    dp[u]=A[u];
    for(auto v:G[u]){
        if(v==f)continue;
        dfs1(v,u);
        dp[u]+=max(dp[v],1ll*0);
    }
    ans=max(ans,dp[u]);
}

void dfs2(int u,int f){
    dp[u]=A[u];
    for(auto v:G[u]){
        if(v==f)continue;
        dfs2(v,u);
        dp[u]+=max(dp[v],1ll*0);
    }
    if(dp[u]==ans){
        k++;
        dp[u]=-inf;
    }
}

int main(){
    cin>>n;
    FOR(i,1,n)dp[i]=-inf;
    FOR(i,1,n)scanf("%d",&A[i]);
    FOR(i,1,n-1){
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    dfs1(1,-1);
    dfs2(1,-1);
    cout<<ans*k<<" "<<k<<endl;
}

Publicados 203 artículos originales · ganado elogios 17 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/mxYlulu/article/details/104223173
Recomendado
Clasificación