Submission #822926

#TimeUsernameProblemLanguageResultExecution timeMemory
822926WarinchaiDreaming (IOI13_dreaming)C++14
100 / 100
83 ms19152 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; int p[100005]; int mxp[100005]; int mxl[100005]; pair<int,int>mxc[100005]; vector<pair<int,int> >v[100005]; int fp(int a){ if(p[a]==a){ return a; } return p[a]=fp(p[a]); } void un(int a,int b){ p[fp(a)]=fp(b); } int mxx=0; int fmxl(int x,int p){ if(p==-1&&v[x].size()==0){ return 0; } if(v[x].size()==1&&p!=-1){ return 0; } int se=0,fi=0; for(int i=0;i<v[x].size();i++){ if(v[x][i].first==p){ continue; } int val=fmxl(v[x][i].first,x)+v[x][i].second; if(val>fi){ se=fi; fi=val; }else{ se=max(se,val); } } //cout<<x<<" "<<fi<<" "<<se<<endl; mxc[x]={fi,se}; if(fi+se>mxx){ mxx=fi+se; } return fi; } int ans=INT_MAX; void fmxp(int x,int p,int mp){ int val=max(mp,mxc[x].first); //cout<<x<<" "<<mp<<" "<<mxc[x].first<<" "<<val<<endl; ans=min(ans,val); //cout<<"ans:"<<ans<<endl; for(int i=0;i<v[x].size();i++){ if(v[x][i].first==p){ continue; } //cout<<"before "<<v[x][i].first<<":"<<mp+; int nmp=max(mp,(mxc[v[x][i].first].first+v[x][i].second==mxc[x].first?mxc[x].second:mxc[x].first))+v[x][i].second; fmxp(v[x][i].first,x,nmp); } } vector<int>prr; vector<int>cpmx; int travelTime(int n, int m, int l, int a[], int b[], int t[]) { for(int i=0;i<n;i++){ p[i]=i; } for(int i=0;i<m;i++){ un(a[i],b[i]); v[a[i]].push_back({b[i],t[i]}); v[b[i]].push_back({a[i],t[i]}); } for(int i=0;i<n;i++){ if(p[i]==i){ prr.push_back(i); } } int tmmx=0; for(int i=0;i<prr.size();i++){ //cout<<prr[i]<<":"<<endl; mxx=0; //cout<<"fmxl:"<<prr[i]<<endl; fmxl(prr[i],-1); mxl[prr[i]]=mxx; if(mxx>tmmx){ tmmx=mxx; } //cout<<"fmxp:"<<prr[i]<<endl; ans=INT_MAX; fmxp(prr[i],-1,0); mxp[prr[i]]=ans; cpmx.push_back(ans); //cout<<mxx<<" "<<ans<<endl; } sort(cpmx.begin(),cpmx.end(),greater<int>()); int rans=0; if(n-m>=2){ rans=max(rans,cpmx[0]+cpmx[1]+l); } if(n-m>=3){ rans=max(rans,cpmx[1]+cpmx[2]+l*2); } rans=max(rans,tmmx); return rans; } /* int ar1[100005]; int ar2[100005]; int t1[100005]; int main(){ int n,m,l; cin>>n>>m>>l; for(int i=0;i<m;i++){ cin>>ar1[i]>>ar2[i]>>t1[i]; } cout<<travelTime(n,m,l,ar1,ar2,t1); }*/

Compilation message (stderr)

dreaming.cpp: In function 'int fmxl(int, int)':
dreaming.cpp:27: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]
   27 |     for(int i=0;i<v[x].size();i++){
      |                 ~^~~~~~~~~~~~
dreaming.cpp: In function 'void fmxp(int, int, int)':
dreaming.cpp:52: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]
   52 |     for(int i=0;i<v[x].size();i++){
      |                 ~^~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:78:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for(int i=0;i<prr.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...