제출 #703304

#제출 시각아이디문제언어결과실행 시간메모리
703304Doncho_BonbonchoDreaming (IOI13_dreaming)C++14
100 / 100
493 ms31732 KiB
#include <bits/stdc++.h> #include "dreaming.h" typedef long long ll; const int MAX_N = 1e6 + 42; std::vector<std::pair<int, int>> v[MAX_N]; int par[MAX_N]; int dist[MAX_N]; int center; int d; bool viz1[MAX_N]; bool viz[MAX_N]; void bfs( int x ){ // std::cerr<<"\n\n"; dist[x] = 0; center = x; d = 0; std::queue<std::pair<int, std::pair<int, int>>> q; q.push({x, {0, -2}}); par[x] = x; while( q.size() ){ auto curr = q.front(); q.pop(); int cur = curr.first; int currDist = curr.second.first; int currPar = curr.second.second; // std::cerr<<" # "<<cur<<" "<<currDist<<" "<<currPar<<"\n"; par[cur] = currPar; viz[cur] = true; viz1[cur] = true; if( currDist > d ){ d = currDist; center = cur; } for( auto j : v[cur] ){ if( j.first == currPar or viz[j.first] ) continue; dist[j.first] = j.second; q.push({j.first, {currDist + j.second, cur}}); } } } std::vector<std::pair<int, int>> addEgd; int travelTime(int n, int m, int l, int a[], int b[], int c[]) { for( int i=0 ; i<m ; i++ ){ v[a[i]].push_back({b[i], c[i]}); v[b[i]].push_back({a[i], c[i]}); } /* for( int i=0 ; i<n ; i++ ){ std::cerr<<i<<" : "; for( auto j : v[i] ) std::cerr<<j.first<<" "<<j.second<<" , "; std::cerr<<"\n"; } */ for( int i=0 ; i<n ; i++ ){ if( viz1[i] ) continue; // std::cerr<<" ! "<<i<<"\n"; for( int i=0 ; i<n ; i++ ) viz[i] = false; bfs( i ); int x = center; for( int i=0 ; i<n ; i++ ) viz[i] = false; bfs( center ); // std::cerr<<center<<" "<<d<<"\n"; if( d == 0 ){ addEgd.push_back({0, i}); continue; } int sum = 0; int curr = center; int p = -1; for( int j=0 ; j<n ; j++ ){ sum += dist[curr]; p = curr; curr = par[curr]; if( sum * 2 > d ) break; } int a = std::max( sum, d-sum ); sum -= dist[p]; if( std::max( sum, d - sum ) < a ) addEgd.push_back({std::max(sum, d - sum), p}); else addEgd.push_back({a, curr}); // std::cerr<<" $ "<<i<<" -> "<<addEgd[addEgd.size()-1].first<<" "<<addEgd[addEgd.size()-1].second<<"\n"; } std::sort( addEgd.rbegin(), addEgd.rend() ); int ind1 = addEgd[0].second; for( int i=1 ; i<addEgd.size() ; i++ ){ int ind2 = addEgd[i].second; v[ind1].push_back({ind2, l}); v[ind2].push_back({ind1, l}); // std::cerr<<" + "<<ind1<<" "<<ind2<<"\n"; } for( int i=0 ; i<n ; i++ ) viz[i] = false; bfs(0); for( int i=0 ; i<n ; i++ ) viz[i] = false; bfs(center); int nas = d; return nas; }

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

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:78:7: warning: unused variable 'x' [-Wunused-variable]
   78 |   int x = center;
      |       ^
dreaming.cpp:109:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |  for( int i=1 ; i<addEgd.size() ; i++ ){
      |                 ~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...