pat甲級1003 Emergency(25点)

1585 ワード

タイトルリンク:
https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376
 
テーマ:
これは図の中で最も短いパスのテーマです.ただし、最短パスで頂点の重みの最大値を選択する条件を追加しました.この例ではdijkstraアルゴリズムを使用します.
 
参照コード:
#include
#include
#include
using namespace std;
const int maxv=510;
const int inf=1000000000;
i
int n,m,st,ed,G[maxv][maxv],weight[maxv];  //          
int d[maxv],w[maxv],num[maxv];      //d[i]     i     ,w[i]        
bool vis[maxv]={false};      //num[i]   i       ,vis[i]          
void Dijkstra(int s){  
  fill(d,d+maxv,inf);  
  memset(num,0,sizeof(num));   //fill(num, num + maxv, 0);    
  memset(w,0,sizeof(w));
  d[s]=0; w[s]=weight[s]; num[s]=1;   //     d, w, num。
  for(int i=0;id[u]+G[u][v]){   
          d[v]=d[u]+G[u][v];
          w[v]=w[u]+weight[v];
          num[v]=num[u];               //   u  v       ,   u        
                                           //  v         
        }else if(d[u]+G[u][v] == d[v]){
          if(w[u]+weight[v]>w[v]){    //       ,       ,    
            w[v]=w[u]+weight[v];
          }
          num[v]+=num[u];      //   u  v           ,   u        
                               //    v           u       
        }
      }
    }
  }
}

int main(){
  scanf("%d%d%d%d",&n,&m,&st,&ed);
  for(int i=0;i