제출 #400784

#제출 시각아이디문제언어결과실행 시간메모리
400784kshitij_sodaniShortcut (IOI16_shortcut)C++14
31 / 100
2081 ms35708 KiB
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
//#define endl '\n'

#include "shortcut.h"
//vector<pair<llo,llo>> adj[1000001];
llo dist[6001][6001];
vector<pair<llo,llo>> adj[1000001];
void dfs(llo no,llo par=-1,llo no2=-1,llo lev=0){
	dist[no2][no]=lev;
	for(auto j:adj[no]){
		if(j.a!=par){
			dfs(j.a,no,no2,lev+j.b);
		}
	}
}
long long find_shortcut(int n, std::vector<int> aa, std::vector<int> bb, int cc)
{
	for(int i=0;i<n-1;i++){
		adj[i].pb({i+1,aa[i]});
		adj[i+1].pb({i,aa[i]});
	}
	for(int i=0;i<n;i++){
		adj[i].pb({n+i,bb[i]});
		adj[n+i].pb({i,bb[i]});
	}
	for(int i=0;i<2*n;i++){
		dfs(i,-1,i);
	}
	/*for(int i=0;i<2*n;i++){
		for(int j=0;j<2*n;j++){
			cout<<dist[i][j]<<",";
		}
		cout<<endl;
	}*/
	llo ans=1e18;
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			llo ma=0;
			for(int k=n;k<2*n;k++){
				for(int l=k;l<2*n;l++){
					ma=max(ma,min(dist[k][l],min(dist[k][i]+cc+dist[j][l],dist[k][j]+cc+dist[i][l])));		
					
				}
			}
			/*if(ma==0){
				cout<<i<<":"<<j<<endl;
			}*/
			ans=min(ans,ma);
		}
	}




    return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...