Submission #1279343

#TimeUsernameProblemLanguageResultExecution timeMemory
1279343vuquangsangRace (IOI11_race)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

#define     el "\n"
#define     FOR(i,a,b) for(int i = (a), _b = (b); i <= _b; i++)
#define     FORD(i,a,b) for(int i = (a), _b = (b); i >= _b; i--)
#define     pb push_back
#define     fi first
#define     se second
#define     all(x) x.begin(),x.end()
#define     lg(x) __lg(x)
#define     alla(a,n) a+1,a+n+1
#define     ll long long


template <class T> bool maxi(T &x, T y) { if(x < y) { x = y ; return true ;} return false;}
template <class T> bool mini(T &x, T y) { if(x > y) { x = y ; return true ;} return false;}

const int N = 1e6 + 2;
const int maxT = 1e6 + 2;
int n, L;
vector<pair<int, int>> adj[N];

void inp()
{
    cin >> n >> L;
    FOR(i, 1, n - 1) {
        int x, y, w; cin >> x >> y >> w;
        x++; y++;
        adj[x].pb({y, w});
        adj[y].pb({x, w});
    }
}

/* Try your best
    No regrets */

namespace subtask_1
{
    #define pii pair<int, int>
    bool vis[N];

    int sz[N];
    void dfs_sz(int u, int p)
    {
        sz[u] = 1;
        for(pii x : adj[u]) {
            int v = x.fi, w = x.se;
            if(v == p || vis[v]) continue;
            dfs_sz(v, u);
            sz[u] += sz[v];
        }
    }
    int centroid(int u, int p, int n)
    {
        for(pii x : adj[u]) {
            int v = x.fi;
            if(v == p || vis[v]) continue;
            if(sz[v] > n / 2) return centroid(v, u, n);
        }
        return u;
    }

    int minDist[maxT];

    int ans = -1;
    void dfsAns(int u, int p, int depth, int dis)
    {
        if(dis <= L ){
            if(minDist[L - dis] != -1) mini(ans, depth + minDist[L - dis]);
        }
        for(pii x : adj[u]) {
            int v = x.fi, w = x.se;
            if(v == p || vis[v]) continue;
            dfsAns(v, u, depth + 1, dis + w);
        }
    }

    void dfsUpd(int u, int p, int depth, int dis)
    {
        if(dis <= L) {
            if(minDist[dis] == -1) minDist[dis] = depth;
            else mini(minDist[dis], depth);
        }
        for(pii x : adj[u]) {
            int v = x.fi, w = x.se;
            if(v == p || vis[v]) continue;
            dfsUpd(v, u, depth + 1, dis + w);
        }
    }

    void dfsReset(int u, int p, int depth, int dis)
    {
        if(dis <= L) {
            minDist[dis] = -1;
        }
        for(pii x : adj[u]) {
            int v = x.fi, w = x.se;
            if(v == p || vis[v]) continue;
            dfsReset(v, u, depth + 1, dis + w);
        }
    }

    void Calc(int u)
    {
        vis[u] = 1;
        dfs_sz(u, 0);

        minDist[0] = 0;
        for(pii x : adj[u]) {

            int v = x.fi, w = x.se;
            if(vis[v]) continue;

            dfsAns(v, u, 1, w);
            dfsUpd(v, u, 1, w);
        }

        minDist[0] = -1;
        for(pii x : adj[u]) {
            int v = x.fi, w = x.se;
            if(vis[v]) continue;

            dfsReset(v, u, 1, w);
        }

        for(pii x : adj[u]) {
            int v = x.fi;
            if(vis[v]) continue;

            Calc(centroid(v, u, sz[v]));
        }
    }
    void slv()
    {
        if(!L ){
            cout << 0; return;
        }

        FOR(i, 1, L) minDist[i] = -1;

        ans = n + 1;

        dfs_sz(1, 0);
        Calc(centroid(1, 0, n));

        cout << (ans == n + 1 ? -1 : ans);
    }
}

/* Code slowly, think carefully */

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

    #define __Azul__ "race"
    if(fopen(__Azul__".inp", "r")) {
        freopen(__Azul__".inp", "r", stdin);
        freopen(__Azul__".out", "w", stdout);
    }

    bool qs = 0;

    int T = 1;
    if(qs) cin >> T;
    while(T--) {
        inp();
        subtask_1::slv();
    }

    cerr << "\nTime" << 0.001 * clock() << "s "; return 0;


}





Compilation message (stderr)

race.cpp:153:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  153 | main()
      | ^~~~
race.cpp: In function 'int main()':
race.cpp:159:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  159 |         freopen(__Azul__".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
race.cpp:160:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  160 |         freopen(__Azul__".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccJCdm6y.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccZDl9w9.o:race.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccJCdm6y.o: in function `main':
grader.cpp:(.text.startup+0x28): undefined reference to `best_path(int, int, int (*) [2], int*)'
collect2: error: ld returned 1 exit status