P4779 求助(#1,#3,#4TLE,其余AC)
  • 板块灌水区
  • 楼主MC_is_my_dad
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/7 18:27
  • 上次更新2024/10/7 20:49:07
查看原帖
P4779 求助(#1,#3,#4TLE,其余AC)
1498872
MC_is_my_dad楼主2024/10/7 18:27

代码:

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pi pair<int, int>
#define go second
#define age first
int n, m, s, dis[114514], vis[114514];
vector < pi > v[114514];
void dij()
{
	for (int i = 1; i <= n; i ++) dis[i] = 1e9;
	dis[s] = 0;
    priority_queue < pi > q;
    q.push({0, s});
    while (q.size())
    {
    	auto t = q.top();
    	q.pop();
    //	cout << t.go << "\n";
    	if (vis[t.go]) continue;
		vis[t.go] = 1;
		cerr << "正在对 " << t.go << " 这个点尝试进行路径松弛\n";
		for (auto gt : v[t.go])
		{
			int go_to = gt.go;
			int go_qz = gt.age;
			cerr << "正在尝试对连接的 " << go_to << " 这个点进行松弛,原来为 " << dis[go_to] << " 尝试更新为 " << dis[t.go] + go_qz << '\n';
			if (dis[t.go] + go_qz < dis[go_to])
			{
				cerr << "更新了\n";
				dis[go_to] = dis[t.go] + go_qz;
			    q.push({-dis[go_to], go_to});
            }
		}
	}
}
signed main ()
{
	cin >> n >> m >> s;
	for ( int i = 1; i <= m; i ++ )
	{
		int x, y, z;
		cin >> x >> y >> z;
		v[x].push_back({z, y});
	}
	dij ();
	for (int i = 1; i <= n; i ++){
		cout << dis[i] << ' ';
	}
	return 0;
}
2024/10/7 18:27
加载中...