Why WA on #4
查看原帖
Why WA on #4
1036693
carp_oier楼主2023/9/10 16:54

求调

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rl register ll

const ll N = 5010, M = 2e5 + 10;

ll n, m;

ll tot, ne[M], e[M], w[M], h[N], dis[N][2];

bool st[N][2];

struct node
{
	ll id, dis, type;
	bool operator <(const node &x) const 
	{
		return dis > x.dis;
	}
};

priority_queue<node> q;

inline void add(ll a, ll b, ll c)
{
	ne[++tot] = h[a], h[a] = tot, e[tot] = b, w[tot] = c;
}

inline void dij(ll s)
{
	memset(st, 0, sizeof st);
	memset(dis, 0x3f, sizeof dis);
	
	dis[s][0] = dis[s][1] = 0;
	
	q.push({1, 0, 0});
	
	while(q.size())
	{
		node asd = q.top();
		q.pop();
		ll u = asd.id, type = asd.type, dist = asd.dis;
		if(st[u][type]) continue;
		st[u][type] = 1;
		for(rl i=h[u]; ~i; i = ne[i])
		{
			ll v = e[i];
			if(dis[v][0] > dist + w[i])
			{
				dis[v][1] = dis[v][0];
				q.push({v, dis[v][1], 1});
				dis[v][0] = dist + w[i];
				q.push({v, dis[v][0], 0});
			}
			else if(dis[v][1] > dist + w[i])
			{
				dis[v][1] = dist + w[i];
				q.push({v, dis[v][1], 1});
			}
		}
	}
}

int main()
{
	cin >> n >> m;
	
	memset(h, -1, sizeof h);
	
	for(rl i=1; i <= m; ++ i)
	{
		ll a, b, c;
		cin >> a >> b >> c;
		add(a, b, c), add(b, a, c);
	}
	
	dij(1);
	
	cout << dis[n][1] << endl;
	return 0;
}
2023/9/10 16:54
加载中...