Submission #680393

#TimeUsernameProblemLanguageResultExecution timeMemory
680393pls33Traffic (IOI10_traffic)C++17
0 / 100
0 ms212 KiB
#include <bits/stdc++.h>

using namespace std;

using edges_t = vector<vector<int>>;

void city_sum(int from, int to, int index,
              edges_t &edges, edges_t &sums, vector<int> &weights)
{
    int sum = 0;

    for (int i = 0; i < edges[to].size(); i++)
    {
        int &next = edges[to][i];
        if (next == from)
        {
            continue;
        }

        if (sums[to][i] == -1)
        {
            city_sum(to, next, i, edges, sums, weights);
        }

        sum += sums[to][i];
    }

    sums[from][index] = sum + weights[to];
}

int max_load(int city, edges_t &edges, edges_t &sums, vector<int> &weights)
{
    int res = 0;

    for (int i = 0; i < edges[city].size(); i++)
    {
        city_sum(city, edges[city][i], i, edges, sums, weights);
        res = max(res, sums[city][i]);
    }

    return res;
}

int LocateCentre(int N, int P[], int S[], int D[])
{
    edges_t edges(N);
    vector<int> weights(N);

    for (int i = 0; i < N; i++)
    {
        weights[i] = P[i];
    }

    for (int i = 0; i < N - 1; i++)
    {
        int a, b;
        a = S[i];
        b = D[i];
        edges[a].push_back(b);
        edges[b].push_back(a);
    }

    edges_t sums(N);
    for (int i = 0; i < sums.size(); i++)
    {
        sums[i] = vector<int>(edges[i].size(), -1);
    }

    int m_load = numeric_limits<int>::max();
    int vertex = -1;
    for (int i = 0; i < N; i++)
    {
        int load = max_load(i, edges, sums, weights);

        if (load < m_load)
        {
            m_load = load;
            vertex = i;
        }
    }

    return vertex + 1;
}

#ifdef _AAAAAAAAA

static int N, P[1000000], S[1000000], D[1000000];

int main()
{
    freopen("eismas.in", "r", stdin);
    int i;
    scanf("%d", &N);
    for (i = 0; i < N; i++)
        scanf("%d", &P[i]);
    for (i = 0; i < N - 1; i++)
        scanf("%d%d", &S[i], &D[i]);
    int r = LocateCentre(N, P, S, D);
    printf("%d\n", r);
    return 0;
}
#endif

Compilation message (stderr)

traffic.cpp: In function 'void city_sum(int, int, int, edges_t&, edges_t&, std::vector<int>&)':
traffic.cpp:12:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |     for (int i = 0; i < edges[to].size(); i++)
      |                     ~~^~~~~~~~~~~~~~~~~~
traffic.cpp: In function 'int max_load(int, edges_t&, edges_t&, std::vector<int>&)':
traffic.cpp:35:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for (int i = 0; i < edges[city].size(); i++)
      |                     ~~^~~~~~~~~~~~~~~~~~~~
traffic.cpp: In function 'int LocateCentre(int, int*, int*, int*)':
traffic.cpp:64:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |     for (int i = 0; i < sums.size(); i++)
      |                     ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...