#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
#define int ll
const int inf=5e15;
int n,m,k;
int a,b,c;
pair<int,int>bas,tar;
int table[523][523];
int dp[523][523][5];
int32_t main(){
ios_base::sync_with_stdio(23^23);cin.tie(NULL);
cin>>n>>m>>a>>b>>c>>k;
{
priority_queue<pair<int,pair<int,int>>>pq;
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
table[i][j]=inf;
for(int l=0;l<5;l++){
dp[i][j][l]=inf;
}
}
}
for(int i=1;i<=k;i++){
pair<int,int>p;cin>>p.fr>>p.sc;
if(i==1)bas=p;
if(i==k)tar=p;
if(!table[p.fr][p.sc])continue;
table[p.fr][p.sc]=0;
pq.push({0,{p.fr,p.sc}});
}
while(pq.size()){
int dis=-pq.top().fr;
int i=pq.top().sc.fr,j=pq.top().sc.sc;
pq.pop();
if(table[i][j]!=dis)continue;
if(i){
if(table[i-1][j]>table[i][j]+1){
table[i-1][j]=table[i][j]+1;
pq.push({-dis-1,{i-1,j}});
}
}
if(j){
if(table[i][j-1]>table[i][j]+1){
table[i][j-1]=table[i][j]+1;
pq.push({-dis-1,{i,j-1}});
}
}
if(i!=n){
if(table[i+1][j]>table[i][j]+1){
table[i+1][j]=table[i][j]+1;
pq.push({-dis-1,{i+1,j}});
}
}
if(j!=m){
if(table[i][j+1]>table[i][j]+1){
table[i][j+1]=table[i][j]+1;
pq.push({-dis-1,{i,j+1}});
}
}
}
}
priority_queue<pair<int,pair<int,pair<int,int>>>>pq;
dp[bas.fr][bas.sc][4]=0;
pq.push({0,{4,bas}});
function<void(int,int,int,int)>f=[&](int i,int j,int l,int cos)->void{
if(i>n||j>m||i<0||j<0)return;
if(dp[i][j][l]>cos){
dp[i][j][l]=cos;
pq.push({-cos,{l,{i,j}}});
}
};
while(pq.size()){
int dis=-pq.top().fr,tur=pq.top().sc.fr;
int i=pq.top().sc.sc.fr,j=pq.top().sc.sc.sc;
pq.pop();
if(dp[i][j][tur]!=dis)continue;
if(tur==4){
f(i-1,j,4,dis+c);
f(i+1,j,4,dis+c);
f(i,j-1,4,dis+c);
f(i,j+1,4,dis+c);
f(i-1,j,0,dis+a+b);
f(i+1,j,1,dis+a+b);
f(i,j-1,2,dis+a+b);
f(i,j+1,3,dis+a+b);
}
else{
f(i,j,4,dis+table[i][j]*c);
if(tur==0){
f(i-1,j,0,dis+a);
}
if(tur==1){
f(i+1,j,1,dis+a);
}
if(tur==2){
f(i,j-1,2,dis+a);
}
if(tur==3){
f(i,j+1,3,dis+a);
}
}
}
cout<<dp[tar.fr][tar.sc][4]<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |