제출 #900168

#제출 시각아이디문제언어결과실행 시간메모리
900168subrat0018경주 (Race) (IOI11_race)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define nline "\n" using uint = unsigned int; using ull = unsigned long long; const ll M = 1e9 + 7; const ll M2 = 998244353; const ll INF = 2e18; const ll N = 1e6 + 10; const double Degree = 57.2958; /***************************************Debug***********************************************************/ /***************************************Debug***********************************************************/ /***************************************Debug***********************************************************/ #ifndef ONLINE_JUDGE #define debug(x) cerr<< #x << " ";_print(x);cerr<<nline; #else #define debug(x) #endif void _print(int x) {cerr << x;} void _print(bool x) {cerr << x;} void _print(char x) {cerr << x;} void _print(string x) {cerr << x;} void _print(ll x) {cerr << x;} void _print(ull x) {cerr << x;} void _print(float x) {cerr << x;} void _print(double x) {cerr << x;} template<class T>void _print(set<T> v); template<class T>void _print(vector<T> v); template<class T>void _print(multiset<T> v); template<class T>void _print(unordered_set<T> v); template<class T, class V>void _print(map<T, V> v); template<class T, class V>void _print(unordered_map<T, V> v); template<class T>void _print(vector<vector<T>> v); template<class T>void _print(stack<T> v); template<class T>void _print(queue<T> v); template<class T, class V>void _print(pair<T, V> p); template<class T>void _print(queue<T> v) {cerr << "[ "; while (!v.empty()) {_print(v.front()); cerr << " "; v.pop();} cerr << " ]";} template<class T>void _print(stack<T> v) {cerr << "[ "; while (!v.empty()) {_print(v.top()); cerr << " "; v.pop();} cerr << " ]";} template<class T, class V>void _print(pair<T, V> p) {_print(p.first); cerr << " "; _print(p.second); cerr << nline;} template<class T>void _print(set<T> v) {cerr << "[ "; for (auto &i : v) {_print(i); cerr << " ";} cerr << "]";} template<class T>void _print(vector<T> v) {cerr << "[ "; for (auto &i : v) {_print(i); cerr << " ";} cerr << "]";} template<class T>void _print(multiset<T> v) {cerr << "[ "; for (auto &i : v) {_print(i); cerr << " ";} cerr << "]";} template<class T>void _print(unordered_set<T> v) {cerr << "[ "; for (auto &i : v) {_print(i); cerr << " ";} cerr << "]";} template<class T, class V>void _print(map<T, V> v) {cerr << "[ "; for (auto &i : v) {_print(i.first); cerr << " "; _print(i.second); cerr << "\n";} cerr << "]";} template<class T, class V>void _print(unordered_map<T, V> v) {cerr << "[ "; for (auto &i : v) {_print(i.first); cerr << " "; _print(i.second); cerr << "\n";} cerr << "]";} template<class T>void _print(vector<vector<T>> v) {cerr << "[ "; for (auto &i : v) {_print(i); cerr << nline;} cerr << "]";} /************************************************************************************************************/ /************************************************************************************************************/ /************************************************************************************************************/ ll n,k; ll sz[N]; bool dead[N]; ll dist[N]; vector<pair<ll, ll>> g[N]; vector<ll> temp; void prep(int v,ll d, ll len, int par = -1) { if(len > k)return; dist[len] = min(dist[len], d); temp.push_back(len); for(auto &val:g[v]) { if(val.first == par || dead[val.first])continue; prep(val.first, d + 1, len + val.second, v); } } ll func(int v, ll d, ll len, int par = -1) { if(len > k)return INF; ll ans = d + dist[k - len]; debug(v); debug(d); debug(dist[k - len]); for(auto &val:g[v]) { if(val.first == par || dead[val.first])continue; ans = min(ans, func(val.first, d + 1, len + val.second, v)); } return ans; } void dfs(int v, int par=-1) { sz[v] = 1; for(auto &val:g[v]) { if(val.first != par && !dead[val.first]) { dfs(val.first, v); sz[v] += sz[val.first]; } } } int find_centroid(int currSize, int v, int par = -1) { for(auto &val:g[v]) if(val.first != par && !dead[val.first] && 2 * sz[val.first] > currSize) return find_centroid(currSize, val.first, v); return v; } ll decompose(int v) { dfs(v); int centorid = find_centroid(sz[v], v); dead[centorid] = true; ll ans = INF; temp.clear(); dist[0] = 0; for(auto &val:g[centorid]) { if(!dead[val.first]) { ans = min(func(val.first, 1, val.second, centorid), ans); prep(val.first, 1, val.second, centorid); } } dist[0] = INF; for(auto &val:temp) dist[val] = INF; for(auto &val:g[centorid]) if(!dead[val.first]) ans = min(ans, decompose(val.first)); return ans; } void best_path(int, int, int (*) [2], int*) { ll ans = decompose(0); if(ans >= INF) cout<<-1<<nline; else cout<<ans<<nline; } void solve() { cin>>n>>k; vector<pair<ll, ll>> arr; for(int i=0;i<N;i++) dist[i] = INF; for(int i=0;i<n-1;i++) { ll u,v; cin>>u>>v; arr.push_back({u,v}); } for(auto &val:arr) { ll w; cin>>w; g[val.first].push_back({val.second, w}); g[val.second].push_back({val.first, w}); } int x[n-1][2]; int y[n-1]; best_path(n,k,x,y); } int main() { #ifndef ONLINE_JUDGE freopen("debug.txt", "w", stderr); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); int t = 1; // cin>>t; // prec(); for (int i = 1; i <= t; i++) { // cout<<"Case "<<i<<": "; solve(); } return 0; }

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

race.cpp: In function 'int main()':
race.cpp:170:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  170 |     freopen("debug.txt", "w", stderr);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccwr76Ip.o: in function `main':
race.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccWvPrhp.o:grader.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status