Submission #469194

#TimeUsernameProblemLanguageResultExecution timeMemory
469194jazzupDreaming (IOI13_dreaming)C++14
100 / 100
149 ms19388 KiB
#include "dreaming.h" #include <iostream> #include <fstream> #include <queue> #include <vector> #include <utility> #include <algorithm> #include <cmath> using namespace std; long long dis1[100010],dis2[100010]; bool visited[100010]; vector<pair<long long,long long> > v[100010],pb; vector<long long> pa,nl,len; queue<long long> q; bool shd; int a[100010],b[100010],c[100010]; void dfs(pair<long long,long long> n){ visited[n.first]=true; nl.push_back(n.first); if(dis2[n.first]==n.second && !shd){ double targ=n.second/2.0; double dd=targ; long long pu; for(long long i=0;i<nl.size();i++){ double diff=abs((double)dis2[nl[i]]-targ); if(diff<=dd){ dd=diff; pu=max(dis2[nl[i]],n.second-dis2[nl[i]]); } } len.push_back(pu); shd=true; } for(long long i=0;i<v[n.first].size();i++){ if(!visited[v[n.first][i].first]){ dis2[v[n.first][i].first]=dis2[n.first]+v[n.first][i].second; dfs(make_pair(v[n.first][i].first,n.second)); } } nl.pop_back(); } int travelTime(int n, int m, int l, int a[], int b[], int t[]){ for(long long i=0;i<n;i++){ dis1[i]=-1; visited[i]=false; } for(long long i=0;i<m;i++){ v[a[i]].push_back(make_pair(b[i],t[i])); v[b[i]].push_back(make_pair(a[i],t[i])); } // int cnt=0; for(long long i=0;i<n;i++){ if(!visited[i]){ // cnt++; dis1[i]=0; q.push(i); visited[i]=true; long long mxd=0,nd=i; while(!q.empty()){ long long cur=q.front(); if(dis1[cur]>mxd){ mxd=dis1[cur]; nd=cur; } for(long long i=0;i<v[cur].size();i++){ if(!visited[v[cur][i].first]){ q.push(v[cur][i].first); dis1[v[cur][i].first]=dis1[cur]+v[cur][i].second; visited[v[cur][i].first]=true; } } q.pop(); } pa.push_back(nd); } } // printf("%d\n",cnt); for(long long i=0;i<n;i++){ dis1[i]=-1; visited[i]=false; } long long ml=-1; for(long long i=0;i<pa.size();i++){ dis1[pa[i]]=0; q.push(pa[i]); visited[pa[i]]=true; long long mxd=0,nd=i; while(!q.empty()){ long long cur=q.front(); if(dis1[cur]>mxd){ mxd=dis1[cur]; nd=cur; } q.pop(); for(long long i=0;i<v[cur].size();i++){ if(!visited[v[cur][i].first]){ q.push(v[cur][i].first); dis1[v[cur][i].first]=dis1[cur]+v[cur][i].second; visited[v[cur][i].first]=true; } } } pb.push_back(make_pair(nd,mxd)); ml=max(ml,mxd); } for(long long i=0;i<n;i++){ dis2[i]=-1; visited[i]=false; } for(long long i=0;i<pb.size();i++){ dis2[pb[i].first]=0; shd=false; dfs(pb[i]); } sort(len.begin(),len.end()); long long yo=len.size(); // printf("%lu\n",pa.size()); long long ans=-1; if(yo>=3){ ans=max(len[yo-1]+len[yo-2]+l,len[yo-3]+len[yo-2]+2*l); } else if(yo==2){ ans=len[yo-1]+len[yo-2]+l; } ans=max(ans,ml); return (int)ans; }

Compilation message (stderr)

dreaming.cpp: In function 'void dfs(std::pair<long long int, long long int>)':
dreaming.cpp:29:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |   for(long long i=0;i<nl.size();i++){
      |                     ~^~~~~~~~~~
dreaming.cpp:40:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |  for(long long i=0;i<v[n.first].size();i++){
      |                    ~^~~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:78:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for(long long i=0;i<v[cur].size();i++){
      |                       ~^~~~~~~~~~~~~~
dreaming.cpp:99:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   99 |  for(long long i=0;i<pa.size();i++){
      |                    ~^~~~~~~~~~
dreaming.cpp:113:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |    for(long long i=0;i<v[cur].size();i++){
      |                      ~^~~~~~~~~~~~~~
dreaming.cpp:130:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  130 |  for(long long i=0;i<pb.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...