是因为数据水吗,为啥这能过
查看原帖
是因为数据水吗,为啥这能过
1141399
yanguo12138楼主2024/5/12 11:03

为什么我过了,但是感觉不是很对啊

#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;
}
2024/5/12 11:03
加载中...