답안 #1045923

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1045923 2024-08-06T08:33:36 Z CyberCow Petrol stations (CEOI24_stations) C++17
0 / 100
28 ms 14476 KB
#include <random>
#include <algorithm>
#include <bitset>
#include <chrono>
#include <cmath>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <chrono>
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((x).size())
typedef long long ll;
using ull = unsigned long long;
using namespace std;
mt19937 rnd(348502);
ll mod1 = 998244353;
ll mod = 1e9 + 7;
const ll N = 70005;

vector<pair<int, int>> v[N];
int ans[N], k, sz[N];

void getsz(int g, int p)
{
    sz[g] = 1;
    for (auto to : v[g])
    {
        if (to.first != p)
        {
            getsz(to.first, g);
            sz[g] += sz[to.first];
        }
    }
}

void Dfs(int g, int p, int arj)
{
    for (auto to : v[g])
    {
        if (to.first != p)
        {
            if (to.second > arj)
            {
                ans[g]+=sz[to.first];
                Dfs(to.first, g, k - to.second);
            }
            else
            {
                Dfs(to.first, g, arj - to.second);
            }
        }
    }

}

ll lrjutyun[N];
vector<ll> dasav, arjeqner;

void Dfs1(int g, int p)
{
    sz[g]++;
    dasav.push_back(g);
    for (auto to : v[g])
    {
        if (to.first != p)
        {
            arjeqner.push_back(to.second);
            Dfs1(to.first, g);
            sz[g] += sz[to.first];
        }
    }
}

void solve()
{
    int n, i, j, m, x, y, l;
    cin >> n >> k;
    if (n <= 1000 && 0)
    {
        for (i = 0; i < n - 1; i++)
        {
            cin >> x >> y >> l;
            v[x].push_back({ y, l });
            v[y].push_back({ x, l });
        }
        for ( i = 0; i < n; i++)
        {
            for ( j = 0; j < n; j++)
            {
                sz[j] = 0;
            }
            getsz(i, -1);
            Dfs(i, -1, k);
        }
        for ( i = 0; i < n; i++)
        {
            cout << ans[i] << '\n';
        }
        return;
    }
    for (i = 0; i < n - 1; i++)
    {
        cin >> x >> y >> l;
        v[x].push_back({ y, l });
        v[y].push_back({ x, l });
        lrjutyun[i] = 1;
    }
    lrjutyun[n - 1] = 1;
    for ( i = 0; i < n; i++)
    {
        if (v[i].size() == 1)
        {
            Dfs1(i, -1);
            break;
        }
    }
    ll her = 0, r = 0;
    for ( i = 0; i < n - 1; i++)
    {
        while (r < arjeqner.size() && her + arjeqner[r] <= k)
        {
            her += arjeqner[r];
            r++;
        }
        if ((r < arjeqner.size() && her + arjeqner[r] > k) || her > k)
        {
            ans[dasav[r]] += lrjutyun[i] * (n - 1 - r);
            lrjutyun[r] += lrjutyun[i];
        }
        her -= arjeqner[i];
    }
    for ( i = 0; i < n; i++)
    {
        lrjutyun[i] = 1;
    }
    reverse(all(dasav));
    reverse(all(arjeqner));
    her = 0;
    r = 0;
    for (i = 0; i < n - 1; i++)
    {
        while (r < arjeqner.size() && her + arjeqner[r] <= k)
        {
            her += arjeqner[r];
            r++;
        }
        if ((r < arjeqner.size() && her + arjeqner[r] > k) || her > k)
        {
            ans[dasav[r]] += lrjutyun[i] * (n - 1 - r);
            lrjutyun[r] += lrjutyun[i];
        }
        her -= arjeqner[i];
    }
    for ( i = 0; i < n; i++)
    {
        cout << ans[i] << '\n';
    }
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    ll tt = 1;
    //cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

Compilation message

Main.cpp: In function 'void solve()':
Main.cpp:131:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  131 |         while (r < arjeqner.size() && her + arjeqner[r] <= k)
      |                ~~^~~~~~~~~~~~~~~~~
Main.cpp:136:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  136 |         if ((r < arjeqner.size() && her + arjeqner[r] > k) || her > k)
      |              ~~^~~~~~~~~~~~~~~~~
Main.cpp:153:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  153 |         while (r < arjeqner.size() && her + arjeqner[r] <= k)
      |                ~~^~~~~~~~~~~~~~~~~
Main.cpp:158:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  158 |         if ((r < arjeqner.size() && her + arjeqner[r] > k) || her > k)
      |              ~~^~~~~~~~~~~~~~~~~
Main.cpp:87:18: warning: unused variable 'm' [-Wunused-variable]
   87 |     int n, i, j, m, x, y, l;
      |                  ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2904 KB Output is correct
2 Correct 0 ms 2908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2904 KB Output is correct
2 Correct 0 ms 2908 KB Output is correct
3 Incorrect 1 ms 2908 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2908 KB Output is correct
2 Incorrect 28 ms 14476 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2904 KB Output is correct
2 Correct 0 ms 2908 KB Output is correct
3 Correct 0 ms 2908 KB Output is correct
4 Incorrect 28 ms 14476 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2904 KB Output is correct
2 Correct 0 ms 2908 KB Output is correct
3 Incorrect 21 ms 8128 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2904 KB Output is correct
2 Correct 0 ms 2908 KB Output is correct
3 Incorrect 21 ms 8128 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2904 KB Output is correct
2 Correct 0 ms 2908 KB Output is correct
3 Incorrect 1 ms 2908 KB Output isn't correct
4 Halted 0 ms 0 KB -