[PAT]-L2-001 紧急救援 (25 分)-dijkstra

L2-001.png

分析

这是一道dijkstra的变式题,在求最短路径的基础上,求获得的最大救援数量
写的时候的主要坑点就在于计算有多少条最佳路径。

if(dis[v]>dis[u]+map[u][v]){
  roadnum[v]=roadnum[u];
}
else if(dis[v]==dis[u]+map[u][v]){
  roadnum[v]+=roadnum[u];
}

AC代码

#include
#include
using namespace std;
#define maxn 500
#define inf 0x3f3f3f3f
int n,m,st,ed;

int map[maxn][maxn];
int dis[maxn];
int book[maxn];
int Maxteam[maxn];
int team[maxn];
int pre[maxn];
int roadnum[maxn];

void printPath(int v){
    if(v==st){
        cout<dis[j]){
                min=dis[j];
                u=j;
            }
        }
        if(u==-1) break;
        book[u]=1;
        for(int v=0;vdis[u]+map[u][v]){
                    dis[v]=dis[u]+map[u][v];
                    pre[v]=u;
                    roadnum[v]=roadnum[u];
                    Maxteam[v]=Maxteam[u]+team[v];
                    
                }else if(dis[v]==dis[u]+map[u][v]){
                    roadnum[v]+=roadnum[u];
                    if(Maxteam[v]>n>>m>>st>>ed;
    
    for(int i=0;i>team[i];
    }
    for(int i=0;i>a>>b>>c;
        map[a][b]=map[b][a]=c;
    }
    dijkstra(st);
    cout<

你可能感兴趣的:([PAT]-L2-001 紧急救援 (25 分)-dijkstra)