Submission #114316

#TimeUsernameProblemLanguageResultExecution timeMemory
114316MohamedAhmed04Dreaming (IOI13_dreaming)C++14
100 / 100
199 ms9956 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; const int MAX = 1e5 + 5 ; vector< vector< pair<int , int> > >adj(MAX) ; int vis[MAX] , parent[MAX] , Distance[MAX]; bool t = false ; int now , dist = 0 ; void bfs(int node) { now = node , dist = 0 ; queue< pair<int , pair<int , int> > >q ; q.push({node , {0 , -2}}) ; Distance[node] = 0 ; parent[node] = node ; while(!q.empty()) { pair<int , pair<int , int> >p = q.front() ; q.pop() ; int cur = p.first , d = p.second.first , par = p.second.second ; vis[cur] = 1 ; parent[cur] = par ; if(d > dist) now = cur , dist = d ; for(auto &child : adj[cur]) { if(child.first == par) continue; Distance[child.first] = child.second ; q.push({child.first , {d + child.second , cur}}) ; } } return ; } int travelTime(int n , int m , int l , int A[] , int B[] , int T[] ) { memset(parent , -1 , sizeof(parent)) ; for(int i = 0 ; i < m ; ++i) { int x = A[i] , y = B[i] , c = T[i] ; adj[x].push_back({y , c}) ; adj[y].push_back({x , c}) ; } vector< pair<int , int> >v ; //loop on every Tree for(int i = 0 ; i < n ; ++i) { if(vis[i] == 1) continue ; //found new Tree bfs(i) ; int x = now ; bfs(now) ; //one node only if(dist == 0) { v.push_back({0 , i}) ; continue; } int sum = 0 , cur = now , prv = -1 ; for(int j = 0 ; j < n ; ++j) { sum += Distance[cur] ; prv = cur ; cur = parent[cur] ; if(cur == -1) while(1) ; if(sum*2 >= dist) break; } int a = max(sum , dist - sum) ; sum -= Distance[prv] ; if(max(sum , dist - sum) < a && prv != -1) v.push_back({max(sum , dist - sum) , prv}) ; else v.push_back({a , cur}) ; } //connect edges sort(v.rbegin() , v.rend()) ; int idx = v[0].second ; for(int i = 1 ; i < v.size() ; ++i) { int idx2 = v[i].second ; adj[idx].push_back({idx2 , l}) ; adj[idx2].push_back({idx , l}) ; } bfs(0) ; bfs(now) ; return dist ; } /*int main() { int n , m , l ; cin>>n>>m>>l ; int a[m] , b[m] , t[m] ; for(int i = 0 ; i < m ; ++i) cin>>a[i]>>b[i]>>t[i] ; cout<<travelTime(n , m , l , a , b , t)<<"\n" ; return 0 ; }*/

Compilation message (stderr)

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:58:13: warning: unused variable 'x' [-Wunused-variable]
         int x = now ;
             ^
dreaming.cpp:87:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1 ; i < v.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...