제출 #379103

#제출 시각아이디문제언어결과실행 시간메모리
379103mariowong경주 (Race) (IOI11_race)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; int n,m,u,z,w,ct[1000005],sum,ans,node,sz[200005]; vector <pair<int,int> > edge[200005]; vector <pair<int,int> > v; bool vis[200005],del[200005],ok,cen[200005]; void dfs(int x){ vis[x]=true; sz[x]=1; for (int i=0;i<(int)edge[x].size();i++){ if (!vis[edge[x][i].first]){ dfs(edge[x][i].first); sz[x]+=sz[edge[x][i].first]; } } } void find_centroid(int x,int nowsz){ if (node != -1) goto byew; cen[x]=true; for (int i=0;i<(int)edge[x].size();i++){ if (sz[edge[x][i].first] < sz[x] && sz[edge[x][i].first]*2 > nowsz) goto gg; } if ((nowsz-sz[x])*2 <= nowsz) node=x; gg:; for (int i=0;i<(int)edge[x].size();i++){ if (!cen[edge[x][i].first] && !del[edge[x][i].first] && node == -1) find_centroid(edge[x][i].first,nowsz); } byew:; } void ggto(int x,int dis,int num){ vis[x]=true; ok=false; sz[x]=1; for (int i=0;i<(int)edge[x].size();i++){ if (!vis[edge[x][i].first] && !del[edge[x][i].first]){ ok=true; ggto(edge[x][i].first,dis+edge[x][i].second,num+1); sz[x]+=sz[edge[x][i].first]; } } if (!ok) v.push_back(make_pair(dis,num)); } void div_and_con(int x,int nowsz){ for (int i=0;i<n;i++){ vis[i]=false; cen[i]=false; } for (int i=1;i<=m;i++){ ct[i]=1e9; } v.clear(); sz[x]=1; for (int i=0;i<(int)edge[x].size();i++){ if (!vis[edge[x][i].first] && !del[edge[x][i].first]){ v.clear(); ggto(edge[x][i].first,edge[x][i].second,1); for (int j=0;j<(int)v.size();j++){ if (v[j].first <= m) ans=min(ans,ct[m-v[j].first]+v[j].second); } for (int j=0;j<(int)v.size();j++){ if (v[j].first <= m) ct[v[j].first]=min(ct[v[j].first],v[j].second); } sz[x]+=sz[edge[x][i].first]; } } for (int i=0;i<(int)edge[x].size();i++){ if (!del[edge[x][i].first] && sz[edge[x][i].first] > 1){ node=-1; find_centroid(edge[x][i].first,sz[edge[x][i].first]); del[node]=true; div_and_con(node,sz[edge[x][i].first]); } } } int main(){ ios::sync_with_stdio(false); cin >> n >> m; ans=1e9; for (int i=1;i<n;i++){ cin >> u >> z >> w; edge[u].push_back(make_pair(z,w)); edge[z].push_back(make_pair(u,w)); } dfs(0); for (int i=0;i<n;i++){ for (int j=0;j<(int)edge[i].size();j++){ if (sz[edge[i][j].first] < sz[i] && sz[edge[i][j].first]*2 > n) goto out; } if ((n-sz[i])*2 <= n){ del[i]=true; div_and_con(i,n); break; } out:; } if (ans == 1e9) cout << "-1\n"; else cout << ans << "\n"; return 0; }

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

/tmp/ccKWbteT.o: In function `main':
race.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/ccAC8ykQ.o:grader.cpp:(.text.startup+0x0): first defined here
/tmp/ccAC8ykQ.o: In function `main':
grader.cpp:(.text.startup+0x24): undefined reference to `best_path(int, int, int (*) [2], int*)'
collect2: error: ld returned 1 exit status