Submission #377005

#TimeUsernameProblemLanguageResultExecution timeMemory
377005astoriaSoccer (JOI17_soccer)C++14
35 / 100
571 ms35040 KiB
#include "bits/stdc++.h"
using namespace std;

#define int long long

int32_t main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	int h,w,a,b,c,n;
	cin>>h>>w>>a>>b>>c>>n;
	
	int s[n],t[n];
	for(int i=0; i<n; i++) cin>>s[i]>>t[i];
	
	vector<pair<int,int> > adj[n];
	
	for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			int difs = abs(s[i]-s[j]);
			int dift = abs(t[i]-t[j]);
			
			int optOne = (a*difs) + b + (c*dift);
			if(difs==0) optOne-=b;
			int optTwo = (a*dift) + b + (c*difs);
			if(dift==0) optTwo-=b;
			int optThree = (c*difs) + (c*dift);
			
			int dist = min(min(optOne,optTwo),optThree);
			adj[i].push_back({j,dist});
			adj[j].push_back({i,dist});
		}
	}
	
	int dist[n];
	memset(dist,-1,sizeof(dist));
	dist[0] = 0;
	priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq;
	pq.push({0,0});
	while(!pq.empty()){
		int v = pq.top().first, di = pq.top().second; pq.pop();
		if(dist[v] != di) continue;
		for(auto ii : adj[v]){
			int nv = ii.first, nd = ii.second+di;
			if(dist[nv] != -1 && dist[nv] <= nd) continue;
			dist[nv] = nd;
			pq.push({nv,nd});
		}
	}
	cout<<dist[n-1];
	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...