dalaoM这个Dijkstra最长路到底错哪里0分T^T
查看原帖
dalaoM这个Dijkstra最长路到底错哪里0分T^T
105820
阿尔托莉雅丶楼主2020/12/31 17:01
#include <iostream>
using namespace std;
const int maxn = 1e4 + 3;

int n, cnt = 0;
int head[maxn], vis[maxn], t[maxn];
struct node
{
    int next, to, t;
} e[maxn * 100];

void add(int from, int to, int t)
{
    e[++cnt].next = head[from];
    e[cnt].to = to;
    e[cnt].t = t;
    head[from] = cnt;
}

void dijkstra(void)
{  
    while(1)
    {
        int maxv = 0, maxm = 0;
        for(int i = 1; i <= n; i++)
            if(!vis[i] && t[i] > maxm)
                maxv = i, maxm = t[i];
        vis[maxv] = 1;
        if(maxv == 0)
            return;
        for(int i = head[maxv]; i > 0; i = e[i].next)
        {
            int v = e[i].to;
            if(e[i].t + t[maxv] > t[v])
                t[v] = e[i].t + t[maxv];
        }
    }   
}

int main(void)
{
    int u, v, ti, ma = 0;
    cin >> n;

    for(int i = 0; i < n; i++)
    {
        cin >> u >> ti;
        if(u == 1)
            t[u] = ti;
        while(cin >> v)
            if(v != 0)
                add(v, u, ti);
            else
                break;
    }

    dijkstra();

    for(int i = 1; i <= n; i++)
        ma = max(ma, t[i]);
    
    cout << ma;

    return 0;
}
2020/12/31 17:01
加载中...