답안 #241815

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
241815 2020-06-25T14:56:39 Z marlicu Paprike (COI18_paprike) C++14
0 / 100
69 ms 8184 KB
#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define X first
#define Y second

typedef pair <int, int> pii;

const int MAXN = 3e6 + 5;

int n, k;
int ljutina[MAXN];
vector <vector <int> > veze;
bool finito[MAXN];
set <pii> paprika;
set <int> npaprika;
int rezovi, ostalo;

void ispis_ljutina() {
    cout << "ljutina\n";
    for (int i = 0; i < n; i++) {
        cout << ljutina[i] << " ";
    }
    cout << '\n';
}

void ispis_veze() {
    cout << "veze\n";
    for (int i = 0; i < n; i++) {
        cout << i << " : ";
        for (auto x : veze[i]) cout << x << " ";
        cout << '\n';
    }
}

void ispis_paprika() {
    cout << "paprika\n";
    for (auto x : paprika) {
        cout << x.X << " " << x.Y << '\n';
    }
}

void odradi(int x) {
    ostalo--;

    int z = veze[x][0];

    //cout << x << " - " << z << '\n';

    if (ljutina[x] + ljutina[z] <= k) {
        ljutina[z] += ljutina[x];
    }
    else rezovi++;

    veze[z].erase(remove(veze[z].begin(), veze[z].end(), x), veze[z].end());
    veze[x].clear();

    if (veze[z].empty()) {
        ostalo--;
        return;
    }

    npaprika.insert(z);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin >> n >> k;
    for (int i = 0; i < n; i++) cin >> ljutina[i];

    int a, b;
    veze.resize(n + 5);
    for (int i = 1; i < n; i++) {
        cin >> a >> b;
        --a; --b;
        veze[a].pb(b);
        veze[b].pb(a);
    }

    for (int i = 0; i < n; i++) {
        if (veze[i].size() == 1) paprika.insert({ljutina[i], i});
    }

    ostalo = n;
    while (ostalo > 0) {
        //cout << "ostalo\n" << ostalo << '\n';
        //ispis_paprika();
        //ispis_veze();

        //cout << "povezivanja\n";
        npaprika.clear();
        for (auto x : paprika) {
            odradi(x.Y);
        }

        paprika.clear();
        for (auto x : npaprika) {
            paprika.insert({ljutina[x], x});
        }
    }

    cout << rezovi << '\n';

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 8184 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -