제출 #1355623

#제출 시각아이디문제언어결과실행 시간메모리
1355623vestonveston경주 (Race) (IOI11_race)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>

#define name "vestonluvto"
const char* namein = name ".inp";
const char* nameout = name ".out";

#define fastio() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define PI 3.141592653589793238462
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define pb emplace_back

using namespace std;

#ifndef LOCAL
#define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
#else
#define debug(x)
#endif

void _print(int t) {cerr << t;}
void _print(long long t) {cerr << t;}
void _print(string t) {cerr << t;}
void _print(char t) {cerr << t;}
void _print(long double t) {cerr << t;}
void _print(double t) {cerr << t;}
void _print(unsigned long long t) {cerr << t;}

template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T, class V> void _print(map <T, V> v);
template <class T> void _print(multiset <T> v);
template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.first); cerr << ","; _print(p.second); cerr << "}";}
template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}

void homefix(){
    #ifndef LOCAL
	    freopen("fixcode.txt", "w", stderr);
    #endif
}

void home(){
     homefix();
     if (fopen(namein, "r")) {
        freopen(namein, "r", stdin);
        freopen(nameout, "w", stdout);
     }
}

const int MAXN = 2e5 + 5;

int n;
long long k;
vector<pair<long long, int > > dt[MAXN];
void nhap(){
    cin >> n >> k;

    for(int i = 1; i < n; i++){
        int u, v;
        long long w;
        cin >> u >> v >> w;
        u++;
        v++;
        dt[u].pb(w, v);
        dt[v].pb(w, u);
    }
}

int depth[MAXN], sz[MAXN];
int arr[MAXN], tin[MAXN], tout[MAXN], id;
long long t[MAXN];
vector<long long> vt;
void prpdfs(int u, int p){
    sz[u] = 1;
    vt.pb(t[u]);
    arr[++id] = u;
    tin[u] = id;
    depth[u] = depth[p] + 1;
    for(auto &[w, v] : dt[u])if(v != p){
        t[v] = t[u] + w;
        prpdfs(v, u);
        sz[u] += sz[v];
    }
    tout[u] = id;
}


map<long long, int> luu; 

void bfsolve(){
    prpdfs(1, 0);
    
}

int kq = 1e9;
void sack(int u, int p, bool keep){
    int big = 0;
    for(auto &[w, v] : dt[u]) if(v != p && sz[v] > sz[big]) big = v;

    for(auto &[w, v] : dt[u]) if(v != p && v != big) sack(v, u, 0);

    if(big != 0) sack(big, u, 1);

    long long kk = (long long)k + t[u];
    if(luu.count(kk)){
        kq = min(kq, luu[kk] - depth[u]);
    }

    if(!luu.count(t[u])) luu[t[u]] = depth[u];
    else luu[t[u]] = min(luu[t[u]], depth[u]);

    for(auto &[w, v] : dt[u]) if(v != p && v != big){
        for(int idx = tin[v]; idx <= tout[v]; idx++){
            int x = arr[idx];
            long long kkk = k + 2LL * t[u] - t[x];
            
            if(luu.count(kkk)){
                kq = min(kq, luu[kkk] + depth[x] - 2*depth[u]);
            }
        }   
 
        for(int idx = tin[v]; idx <= tout[v]; idx++){
            int x = arr[idx];
            if(!luu.count(t[x])) luu[t[x]] = depth[x];
            else luu[t[x]] = min(luu[t[x]], depth[x]);
        }
    }

    if(!keep){
        for(int idx = tin[u]; idx <= tout[u]; idx++){
            int v = arr[idx];
            luu.erase(t[v]); 
        }
    }
}


void solve(){bfsolve();
    sack(1, 0, 1);
    if(kq > 1e6)cout << -1;
    else cout << kq;
}

int main(){
    fastio(); home();int t = 1;
    //cin >> t;
    while(t--)nhap(), solve();
    return 0;
}

/*                                                           ___________
╔══╗                ▐▀▄       ▄▀▌   ▄▄▄▄▄▄▄                /             \
╚╗╔╝                ▌▒▒▀▄▄▄▄▄▀▒▒▐▄▀▀▒██▒██▒▀▀             /      MEO      \
╔╝(¯’v´¯)          ▐▒▒▒▒▀▒▀▒▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▀▄          \
╚══’.¸.            ▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄▒▒▒▒▒▒▒▒▒▒▒▒▀▄         \  __________  /
╔♫═╗╔╗ kitten     ▀█▒▒▒█▌▒▒█▒▒▐█▒▒▒▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌        |/
╚╗╔╝║║♫═╦╦╦╔╗     ▀▌▒▒▒▒▒▒▀▒▀▒▒▒▒▒▒▀▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐   ▄▄
╔╝╚╗♫╚╣║║║║╔╣     ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌▄█▒█
╚═♫╝╚═╩═╩♫╩═╝      ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒█▀
┊  ┊  ┊  ┊    ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▀
┊  ┊  ┊  ┊    ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
┊  ┊  ┊  ★    ▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
┊  ┊  ☆        ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
┊  ★             ▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐
☆                 ▐▄▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄▌
                      ▀▄▄▀▀▀▀▀▄▄▀▀▀▀▀▀▀▄▄▀▀▀▀▀▄▄▀

*/

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

race.cpp: In function 'void homefix()':
race.cpp:42:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |             freopen("fixcode.txt", "w", stderr);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
race.cpp: In function 'void home()':
race.cpp:49:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |         freopen(namein, "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
race.cpp:50:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |         freopen(nameout, "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccHxLxt1.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc7GSUPp.o:race.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccHxLxt1.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