제출 #1336584

#제출 시각아이디문제언어결과실행 시간메모리
1336584sh_qaxxorov_571Traffic (IOI10_traffic)C++20
컴파일 에러
0 ms0 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int MAXN = 1000005;
vector<int> adj[MAXN];
long long subtree_fans[MAXN];
int fans[MAXN];
long long total_fans = 0;
long long min_max_congestion = 2e18; // Juda katta son
int best_city = 0;
int N;

// Har bir tarmoqdagi muxlislar yig'indisini hisoblash
void dfs_fans(int u, int p) {
    subtree_fans[u] = fans[u];
    for (int v : adj[u]) {
        if (v != p) {
            dfs_fans(v, u);
            subtree_fans[u] += subtree_fans[v];
        }
    }
}

// Eng maqbul shaharni topish
void dfs_solve(int u, int p) {
    long long max_congestion = 0;
    
    // Pastki tarmoqlardagi muxlislar soni
    for (int v : adj[u]) {
        if (v != p) {
            max_congestion = max(max_congestion, subtree_fans[v]);
            dfs_solve(v, u);
        }
    }
    
    // Yuqori tomondagi (ota tomondagi) muxlislar soni
    long long upper_fans = total_fans - subtree_fans[u];
    max_congestion = max(max_congestion, upper_fans);
    
    // Eng kichik maksimal tirbandlikni yangilash
    if (max_congestion < min_max_congestion) {
        min_max_congestion = max_congestion;
        best_city = u;
    }
}

int LocateCentre(int n, int p[], int s[], int d[]) {
    N = n;
    total_fans = 0;
    for (int i = 0; i < n; i++) {
        fans[i] = p[i];
        total_fans += p[i];
        adj[i].clear();
    }
    
    for (int i = 0; i < n - 1; i++) {
        adj[s[i]].push_back(d[i]);
        adj[d[i]].push_back(s[i]);
    }
    
    dfs_fans(0, -1);
    dfs_solve(0, -1);
    
    return best_city;
}

// Test qilish uchun main funksiyasi
int main() {
    int n = 5;
    int p[] = {10, 10, 10, 20, 20};
    int s[] = {0, 1, 2, 3};
    int d[] = {2, 2, 3, 4};
    
    // Masalaning 1-betidagi misolga ko'ra (0-10, 1-10, 2-10, 3-20, 4-20)
    // S va D massivlari qirralarni belgilaydi: 0-2, 1-2, 2-3, 3-4 [cite: 50]
    
    cout << "Tavsiya etilgan shahar: " << LocateCentre(n, p, s, d) << endl;
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccFUJunU.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccST2meh.o:traffic.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status