题目:
解题思路:利用selectnum和maxrescue数组沿途记录下每个点的条数和最大救援队伍数即可(Dijkstra)#include#define MAX 500#define Inf 99999999int main(){ int vernum,arcnum,v1,v2; int a[MAX][MAX],rescue[MAX],key[MAX],dist[MAX]; int selectnum[MAX],maxrescue[MAX]; int i,j,k; scanf("%d %d %d %d",&vernum,&arcnum,&v1,&v2); for(i=0;i dist[v]+a[v][w])//小于情况下 { dist[w]=dist[v]+a[v][w]; maxrescue[w]=maxrescue[v]+rescue[w];//w点的maxrescue为前一个v点的maxrescue+rescue selectnum[w]=selectnum[v];//前一点v的selectnum } else if(dist[w]==dist[v]+a[v][w])//等于情况下,可能路径条数增加,并判定maxrescue大小 { selectnum[w]+=selectnum[v];//w=w+v; if(maxrescue[w]