Submission #141643

#TimeUsernameProblemLanguageResultExecution timeMemory
141643kimbj0709Dreaming (IOI13_dreaming)C++17
100 / 100
184 ms20212 KiB
#include<bits/stdc++.h> #include "dreaming.h" using namespace std; typedef long long ll; #define maxn 100005 ll ret = 0; vector<vector<pair<ll,ll> > > adj(maxn); vector<ll> currcomponent; vector<ll> length1(maxn,0); vector<ll> last(maxn,-1); vector<ll> length2(maxn,0); void dfs(ll node,ll parent,ll weight){ currcomponent.push_back(node); length1[node] = weight; for(auto k:adj[node]){ if(k.first!=parent){ dfs(k.first,node,weight+k.second); } } return; } void dfs2(ll node,ll parent,ll weight){ length2[node] = weight; for(auto k:adj[node]){ if(k.first!=parent){ last[k.first] = node; dfs2(k.first,node,weight+k.second); } } return; } ll find(ll node,ll length){ ll currnode = node; ll ans = INT_MAX; while(last[currnode]!=-1){ ans = min(ans,max(abs(length-length2[currnode]),length2[currnode])); currnode = last[currnode]; } ret = max(ret,length); return max(length-ans,ans); } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(ll i=0;i<M;i++){ adj[A[i]].push_back({B[i],T[i]}); adj[B[i]].push_back({A[i],T[i]}); } vector<ll> weights; for(int i=0;i<N;i++){ if(length1[i]==0){ dfs(i,-1,0); ll currmx = 0,currnode = 0; if(currcomponent.size()==1){ weights.push_back(0); currcomponent.clear(); goto cont; } for(int j=0;j<currcomponent.size();j++){ if(length1[currcomponent[j]]>currmx){ currmx = length1[currcomponent[j]]; currnode = currcomponent[j]; } } dfs2(currnode,-1,0); currmx = 0,currnode=0; for(int j=0;j<currcomponent.size();j++){ if(length2[currcomponent[j]]>currmx){ currmx = length2[currcomponent[j]]; currnode = currcomponent[j]; } } weights.push_back(find(currnode,currmx)); currcomponent.clear(); } cont : ; } sort(weights.begin(),weights.end()); if(weights.size()>=2){ ret = max(ret,weights[weights.size()-1]+weights[weights.size()-2]+L); } if(weights.size()>=3){ ret = max(ret,weights[weights.size()-3]+weights[weights.size()-2]+2*L); } return ret; }

Compilation message (stderr)

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:58:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int j=0;j<currcomponent.size();j++){
                   ~^~~~~~~~~~~~~~~~~~~~~
dreaming.cpp:66:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int j=0;j<currcomponent.size();j++){
                   ~^~~~~~~~~~~~~~~~~~~~~
#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...