Submission #342804

#TimeUsernameProblemLanguageResultExecution timeMemory
342804wwddDreaming (IOI13_dreaming)C++14
100 / 100
109 ms17260 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> ii; typedef vector<ii> vii; typedef vector<vii> al; typedef vector<int> vi; typedef vector<vi> vvi; ii dfa(int u, int p, al& g, vii& pa) { ii res = {u,0}; for(int i=0;i<g[u].size();i++) { int v = g[u][i].first; int dist = g[u][i].second; if(v == p) { continue; } pa[v] = {u,dist}; ii dv = dfa(v,u,g,pa); if(dv.second+dist > res.second) { res = {dv.first,dv.second+dist}; } } return res; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { al g; g.assign(N,vii()); for(int i=0;i<M;i++) { int a = A[i]; int b = B[i]; g[a].push_back({b,T[i]}); g[b].push_back({a,T[i]}); } vii pa(N,{-1,-1}); vi rep; vii dia; int res = 0; for(int i=0;i<N;i++) { if(pa[i].first == -1) { ii va = dfa(i,i,g,pa); int mv = va.first; pa[mv] = {mv,0}; ii vb = dfa(mv,mv,g,pa); rep.push_back(mv); dia.push_back(vb); res = max(res,vb.second); } } vi wa; for(int i=0;i<rep.size();i++) { int u = dia[i].first; int da = 0; int db = dia[i].second; int dv = db; while(pa[u].first != u) { da += pa[u].second; db -= pa[u].second; u = pa[u].first; dv = min(dv,max(da,db)); } wa.push_back(dv); } sort(wa.rbegin(),wa.rend()); res = max(res,wa.front()); if(wa.size() > 1) { res = max(res,wa[0]+wa[1]+L); } if(wa.size() > 2) { res = max(res,wa[1]+wa[2]+2*L); } return res; }

Compilation message (stderr)

dreaming.cpp: In function 'ii dfa(int, int, al&, vii&)':
dreaming.cpp:13:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |  for(int i=0;i<g[u].size();i++) {
      |              ~^~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:52:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |  for(int i=0;i<rep.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...