제출 #768752

#제출 시각아이디문제언어결과실행 시간메모리
768752CaubethieunangRace (IOI11_race)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#define ll long long
#define LOG 20
#define MASK(i) (1LL<<(i))
#define BIT(x,i) (((x)>>(i))&1)
#define FIRST_BIT(mask) __builtin_ctz((mask)&(-mask))
#define ERASE_BIT(mask) (mask)^((mask)&(-mask))
#define left _left
#define right _right
#define task "t"
using namespace std;
const int INF=1e9;
const int iat=1e6+9;
const int mod=1e9+7;
const int MAX=15e5;
void fast_IO()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    if(fopen(task".inp","r"))
    {
        freopen(task".inp","r",stdin);
        freopen(task".out","w",stdout);
    }
}
int n,k,dem;
struct CentroidDecomposition
{
    int child[iat],check[iat],cntedge[iat];
    set <pair<int,int>> g[iat];
    void addEdge(int u, int v, int w)
    {
        g[u].insert({v,w}); g[v].insert({u,w});
    }
    int dfs(int u, int par)
    {
        child[u]=1;
        for(auto it : g[u])
        {
            if(it.first!=par)child[u]+=dfs(it.first,u);
        }
        return child[u];
    }
    int centroid(int u, int par, int sz)
    {
        for(auto it : g[u])
        {
            if(it.first!=par)
            {
                if(child[it.first]>sz/2)return centroid(it.first,u,sz);
            }
        }
        return u;
    }
    int dfs2(int u, int par, int dist, int cnt, int t, vector <pair<int,int>> &v)
    {
        int haha=k-dist,ans=INF;
        if(haha>=0 && check[haha]==t)ans=min(ans,cnt+cntedge[haha]);
        if(dist<=k)
        {
            v.push_back({dist,cnt});
            for(auto it : g[u])
            {
                if(it.first!=par)ans=min(ans,dfs2(it.first,u,it.second+dist,cnt+1,t,v));
            }
        }
        return ans;
    }
    int solve(int u, int par)
    {
        int sz=dfs(u,par);
        int node=centroid(u,par,sz);
        int ans=INF;
        int t=++dem;
        check[0]=t,cntedge[0]=0;
        for(auto it : g[u])
        {
            vector <pair<int,int>> tmp;
            ans=min(ans,dfs2(it.first,node,it.second,1,t,tmp));
            for(auto IT : tmp)
            {
                if(check[IT.first]!=t || (check[IT.first]==t && cntedge[IT.first]>IT.second))
                {
                    check[IT.first]=t;
                    cntedge[IT.first]=IT.second;
                }
            }
        }
        vector <pair<int,int>> tmp(g[node].begin(),g[node].end());
        for(auto it : tmp)
        {
            g[node].erase(it); g[it.first].erase({node,it.second});
            ans=min(ans,solve(it.first,node));
        }
        return ans;
    }
}cd;
signed main()
{
    fast_IO();
    cin>>n>>k;
    for(int i=1; i<n; i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        cd.addEdge(u,v,w);
    }
    int ans=cd.solve(0,-1);
    cout<<(ans==INF ? -1 : ans);
}

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

race.cpp: In function 'void fast_IO()':
race.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
race.cpp:24:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |         freopen(task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccjXoqxa.o: in function `main':
race.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccRjbdGb.o:grader.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccRjbdGb.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