제출 #1214329

#제출 시각아이디문제언어결과실행 시간메모리
1214329spetrPetrol stations (CEOI24_stations)C++20
18 / 100
3592 ms24192 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
const ll mmod = 998244353;  
#define vl vector<long long>
#define vll vector<vector<long long>>
#define vlll vector<vector<vector<long long>>>


ll pow(ll x, ll n, ll mod){
    if (n == 0){
        return 1;
    }
ll half = pow(x, n / 2, mod);
ll half_square = (half * half) % mod;

if (n % 2 == 0) {
    return half_square;
} else {
    return (half_square * x) % mod;
}
}   


ll inversion_x(ll x, ll m){
    ll vysledek = pow(x,m-2);
    return vysledek;
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n,k;

    cin >> n >> k;
    vector<vector<vector<ll>>> graf;

    for (ll i = 0; i< n; i++){graf.push_back({});};

    for (ll i = 0; i<n-1; i++){ ll a,b, c; cin >> a >> b >> c; graf[a].push_back({b,c}); graf[b].push_back({a,c});}


    vl pocty;
    for (ll i = 0; i < n; i++){pocty.push_back(0);}
    for (ll i = 0; i < n; i++){
        set<ll> visited;
        set<ll> solved;
        vll zasobnik;
        zasobnik.push_back({i, k});
        vl sons;
        for (ll i = 0; i < n; i++){sons.push_back(1);}

        while (zasobnik.size()>0){
            vl prvek = zasobnik[zasobnik.size()-1];
            zasobnik.pop_back();
            ll pos, kapacita;
            pos = prvek[0];
            kapacita = prvek[1];

            auto f = visited.find(pos);
            if (f == visited.end()){
                visited.insert(pos);
                zasobnik.push_back({pos,kapacita});
                for (ll j = 0; j < graf[pos].size(); j++){
                    auto exist = visited.find(graf[pos][j][0]);
                    if (exist == visited.end()){
                        if (kapacita < graf[pos][j][1]){
                            zasobnik.push_back({graf[pos][j][0], k-graf[pos][j][1]});
                        }
                        else{
                            zasobnik.push_back({graf[pos][j][0], kapacita - graf[pos][j][1]});
                        }
                    }
                }
            }

            else{
                solved.insert(pos);
                for (ll j = 0; j < graf[pos].size(); j++){
                    auto exist = solved.find(graf[pos][j][0]);
                    if (exist != solved.end()){
                        if (kapacita < graf[pos][j][1]){
                            pocty[pos] += sons[graf[pos][j][0]];
                        }
                        sons[pos] += sons[graf[pos][j][0]];
                        
                    }
                }

            }

        }
    }

    for (ll i = 0; i < n; i++){
        cout << pocty[i]<< "\n";
    }


}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...