#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 200020;
int n, visit[N], w[N];
ll d[N];
string ls1, ls2, s1, s2;
priority_queue<pair<int, int> > q;
struct node{
int u, v, w;
};
vector<node> g[N];
void dijkstra(){
memset(d, 0x3f, sizeof(d));
d[1] = 0;
d[n + 1] = w[1];
q.push(make_pair(-d[1], 1));
q.push(make_pair(-d[n + 1], 1 + n));
while(!q.empty()){
int u = q.top().second;
q.pop();
if(visit[u]) continue;
visit[u] = 1;
for(int i=0;i<g[u].size();i++){
int v = g[u][i].v;
int w = g[u][i].w;
if(d[v] > d[u] + w){
d[v] = d[u] + w;
q.push(make_pair(-d[v], v));
}
}
}
}
int main(){
cin >> n;
for(int i=1;i<=n;i++) cin >> w[i];
for(int i=1;i<=n;i++){
cin >> s1;
int len = s1.length();
s2 = s1;
for(int j=0;j<=len-j-1;j++) swap(s2[j], s2[len - j - 1]);
if(ls1 <= s1) g[i - 1].push_back((node){i - 1, i, 0});
if(ls2 <= s1) g[i - 1 + n].push_back((node){i - 1 + n, i, 0});
if(ls1 <= s2) g[i - 1].push_back((node){i - 1, i + n, w[i]});
if(ls2 <= s2) g[i - 1 + n].push_back((node){i - 1 + n, i + n, w[i]});
ls1 = s1, ls2 = s2;
}
dijkstra();
ll ans = min(d[n], d[n + n]);
if(ans == 4557430888798830399) puts("-1");
else cout << ans << endl;
return 0;
}
这代码哪里有毛病?请大佬指出