Submission #1068289

#TimeUsernameProblemLanguageResultExecution timeMemory
1068289TlenekWodoruTruck Driver (IOI23_deliveries)C++17
29 / 100
5595 ms20268 KiB
#include<bits/stdc++.h>
#include "deliveries.h"
using namespace std;
struct Edge
{
    int b,c;
};
vector<Edge>D[100009];
int Deliv[100009];
long long NadMna[100009];
long long NadSuma[100009];
long long Suma[100009];
bool CzyGit[100009];
int n;
void DFS(int v, int last)
{
    NadMna[v]=Deliv[v];
    NadSuma[v]=0;
    for(auto[som,o] : D[v])
    {
        if(som==last){continue;}
        DFS(som,v);
        NadMna[v]+=NadMna[som];
        NadSuma[v]+=NadMna[som]*o+NadSuma[som];
    }
}
void DFS2(int v, int last)
{
    long long maxx=0;
    for(auto[som,o] : D[v])
    {
        if(som==last){continue;}
        Suma[som]=Suma[v]+(NadMna[0]-NadMna[som])*o-NadMna[som]*o;
        maxx=max(maxx,NadMna[som]);
        DFS2(som,v);
    }
    maxx=max(maxx,NadMna[0]-NadMna[v]);
    int odj=0;
    if(v==0){odj=1;}
    if(maxx*2>NadMna[0]-odj){CzyGit[v]=0;}
    else{CzyGit[v]=1;}
}
void init(int N, vector<int> AA, vector<int> BB, vector<int> CC, vector<int> W)
{
    n=N;
    for(int i=0;i<n-1;i++)
    {
        int a=AA[i];
        int b=BB[i];
        int c=CC[i];
        D[a].push_back({b,c});
        D[b].push_back({a,c});
    }
    for(int i=0;i<n;i++)
    {
        Deliv[i]=W[i];
    }
    Deliv[0]++;
	return;
}

long long max_time(int v, int x)
{
    if(v==0){x++;}
    Deliv[v]=x;
    DFS(0,-1);
    Suma[0]=NadSuma[0];
    DFS2(0,-1);
    long long wyn=0;
    for(int i=0;i<n;i++)
    {
        if(CzyGit[i]==0){continue;}
        wyn=max(wyn,Suma[i]*2);
    }
	return wyn;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...