http://poj.org/problem?id=1062
看了别人的题解后写的
#include<iostream> #include<cstring> #define INF 0x7fffffff using namespace std; int price[101][101],lv[101],sub[101],dist[101],vist[101],M,N; void data_init() { int i,j,t,u; memset(price,0,sizeof(price)); memset(lv,0,sizeof(lv)); memset(dist,INF,sizeof(dist)); memset(vist,0,sizeof(vist)); cin>>M>>N; for(i=1;i<=N;i++) { cin>>price[0][i]>>lv[i]>>sub[i]; for(j=1;j<=sub[i];j++) { cin>>t>>u; price[t][i]=u; } } } int dijkstra() { int min,i,j,k; for(i=1;i<=N;i++) dist[i]=price[0][i]; for(i=1;i<=N;i++) { k=0; min=INF; for(j=1;j<=N;j++) { if(!vist[j]&&min>dist[j]) { min=dist[j]; k=j; } } if(k==0) break; vist[k]=1; for(j=1;j<=N;j++) { if(!vist[j]&&price[k][j]>0&&dist[j]>dist[k]+price[k][j]) dist[j]=dist[k]+price[k][j]; } } return dist[1]; } int main(void) { data_init(); int i,j,temp_price,maxlv,minprice=INF; for(i=1;i<=N;i++) { maxlv=lv[i]; for(j=1;j<=N;j++) { if(lv[j]>maxlv||maxlv-lv[j]>M) vist[j]=1; else vist[j]=0; } temp_price=dijkstra(); if(minprice>temp_price) minprice=temp_price; } cout<<minprice<<endl; return 0; }