文章

25

粉丝

0

获赞

27

访问

1.4k

头像
交通规划 题解:SPFA+DAG最小树形图
P1709 中国海洋大学年机试题
发布于2026年2月24日 17:31
阅读数 24

 用SPFA求出dist的值

对于每条u,v,w的边检查是否dist[u]+w==dist[v],求出首都到其他城市的最小路径有向图,每个城市可能对应有多条路径,但无一例外的是每个城市对应的路径都是最小值

该有向图为DAG,对其求最小树形图,也就是对每个节点sum+=以v节点为弧头的所有边中的最小权值

#include <bits/stdc++.h>
using namespace std;
int n,m;
const int maxn=10005;
#define INF 0x3f3f3f3f

struct edge{
    int u,v,w;
};
vector<edge> edges;
vector<int> G[maxn];
vector<edge> edges_2;
vector<int> G_2[maxn];
int dist[maxn];
int vis[maxn];

void spfa(int s){
    queue<int> q;
    for(int i=1;i<=n;i++){
        dist[i]=INF;
    }
    dist[s]=0;
    q.push(s);
    memset(vis,0,sizeof(vis));
    while(!q.empty()){
        int u=q.front();
        q.pop();
        vis[u]=0;
        for(int i=0;i<G[u].size();i++){
            edge& e=edges[G[u][i]];
            if(dist[u]+e.w<dist[e.v]){
                dist[e.v]=dist[u]+e.w;
                if(vis[e.v]==0){
                    q.push(e.v);
                    vis[e.v]=1;
         ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发