为什么我过了,但是感觉不是很对啊
#include <iostream>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
using namespace std;
#define ll long long
const int N = 1e6 + 5;
int dist[N];
int n, m;
typedef pair<int, int>pii;
bool st[N];
int cnt[N];
vector<pii>q[N];
bool spfa()
{
memset(dist, 0x3f3f3f, sizeof(dist));
queue<int>qq;
qq.push(0);
dist[0] = 0;
st[0] = true;
while (qq.size())
{
int t = qq.front();
qq.pop();
st[t] = true;
if (cnt[t] > n + 1)return false;
for (int i = 0; i < q[t].size(); i++)
{
int v = q[t][i].first, w = q[t][i].second;
if (dist[v] > dist[t] + w)
{
dist[v] = dist[t] + w;
//if (!st[t])
//{
qq.push(v);
st[v] = true;
cnt[v]++;
// }
}
}
}
return true;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int num1, num2, num3;
cin >> num1 >> num2 >> num3;
q[num2].push_back(make_pair(num1, num3));
}
for (int i = 1; i <= n; i++)
{
q[0].push_back(make_pair(i,0));
}
bool ty = spfa();
if (ty)
{
ll ans = 0;
for (int i = 1; i <= n; i++)
{
cout << dist[i] << " ";
}
}
else
{
cout << "NO" << endl;
}
return 0;
}