第19个点开始WA,蒟蒻不知道哪里错了,求大佬指错!!!
查看原帖
第19个点开始WA,蒟蒻不知道哪里错了,求大佬指错!!!
363036
chlchl楼主2021/8/7 11:17
#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;
}

这代码哪里有毛病?请大佬指出

2021/8/7 11:17
加载中...