#include<bits/stdc++.h>
using namespace std;
// #define int long long
#define ll long long
const int N=2e6+10;
int t,n,m,k,x[N],tot=0;
struct node{
int b,c,d,h,fl;
};
struct node2{
int x,y,fl;
};
vector<node> v[N];
bool cmp(node A,node B){
return A.b<B.b;
}
pair<int,int> p[N];
map<pair<int,int>,int> mp;
ll dp[N];
int main(){
scanf("%lld",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
tot=0;
for(int i=1;i<=n;i++) v[i].clear();
dp[0]=0; p[0]={1,1};mp[{1,1}]=0;
mp.clear();
for(int i=1;i<=n;i++) scanf("%d",&x[i]);
for(int i=1;i<=k;i++){
int a,b,c,d,h;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&h);
v[a].push_back({b,c,d,h,0});
v[c].push_back({d,0,0,0,1});
}
for(int i=1;i<=n;i++) {
sort(v[i].begin(),v[i].end(),cmp);
for(int j=0;j<v[i].size();j++){
p[++tot]={i,v[i][j].b};
mp[{i,v[i][j].b}]=tot;
p[++tot]={v[i][j].c,v[i][j].d};
mp[{v[i][j].c,v[i][j].d}]=tot;
}
}
for(int i=0;i<=tot;i++) dp[i]=1e18;
for(int i=0;i<v[1].size();i++){
pair<int,int> from={1,v[1][i].b},to={v[1][i].c,v[1][i].d};
dp[mp[from]]=(ll)abs(1-from.second)*x[1];
dp[mp[to]]=min(dp[mp[to]],dp[mp[from]]-v[1][i].h);
}
for(int i=2;i<n;i++){
if(v[i].size()==0) continue;
for(int j=1;j<v[i].size();j++){
pair<int,int> from={i,v[i][j].b};
if(dp[mp[{i,v[i][j-1].b}]]==1e18) continue;
dp[mp[from]]=min(dp[mp[from]],dp[mp[{i,v[i][j-1].b}]]+(ll)abs(v[i][j-1].b-from.second)*x[i]);
}
for(int j=v[i].size()-2;j>=0;j--){
pair<int,int> from={i,v[i][j].b};
if(dp[mp[{i,v[i][j+1].b}]]==1e18) continue;
dp[mp[from]]=min(dp[mp[from]],dp[mp[{i,v[i][j+1].b}]]+(ll)abs(v[i][j+1].b-from.second)*x[i]);
}
for(int j=0;j<v[i].size();j++){
if(v[i][j].fl==0){
if(dp[mp[{i,v[i][j].b}]]==1e18) continue;
dp[mp[{v[i][j].c,v[i][j].d}]]=min(dp[mp[{v[i][j].c,v[i][j].d}]],dp[mp[{i,v[i][j].b}]]-v[i][j].h);
}
}
}
ll ans=1e18;
for(int i=0;i<v[n].size();i++){
ans=min(ans,dp[mp[{n,v[n][i].b}]]+(ll)abs(m-v[n][i].b)*x[n]);
}
// cout<<ans<<endl;
if(ans==1e18){
cout<<"NO ESCAPE"<<endl;
}else{
cout<<ans<<endl;
}
}
}
Codeforces Round #766 (Div. 2) E. Not Escaping
最新推荐文章于 2022-03-18 16:00:12 发布