91分求调
  • 板块P1807 最长路
  • 楼主hhy8399
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/7/23 22:55
  • 上次更新2025/7/24 11:48:08
查看原帖
91分求调
1179906
hhy8399楼主2025/7/23 22:55
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;

#define int long long

const int N = 1e5 + 10;

struct edge {
	int to, data;
};

struct node {
	int num, data;
	bool operator < (const node& a) const {
		return data < a.data;
	}
};


bool pos[N];
int dis[N];
vector<edge> mp[N];

class Solution {
private:
	int n, m, u, v, w;
public:
	void Input() {
		memset(pos, false, sizeof pos);
		cin >> n >> m;
		for (int i = 1; i <= n; i++) {
			dis[i] = 0;       
			mp[i].clear();    
		}
		for (int i = 1; i <= m; i++) {
			cin >> u >> v >> w;
			mp[u].push_back({ v, w });
		}
	}

	void Dijkstra() {
		priority_queue<node> que;  
		que.push({ 1, 0 });
		dis[1] = 0; 

		while (!que.empty()) {
			node k = que.top();
			que.pop();
			pos[k.num] = true;
			for (int i = 0; i < mp[k.num].size(); i++) {
				int to = mp[k.num][i].to;
				int weight = mp[k.num][i].data;
				int new_dist = k.data + weight;

				if (new_dist > dis[to]) {
					dis[to] = new_dist;
					que.push({ to, new_dist });
				}
			}
		}
	}

	void Output() {
		if (pos[n]) cout << dis[n] << endl;
		else cout << -1 << endl;
	}
};

signed main() {
	Solution solve;
	solve.Input();
	solve.Dijkstra();
	solve.Output();
	return 0;
}
2025/7/23 22:55
加载中...