POJ 1062 昂贵的聘礼 最短路 难度:0
http://poj.org/problem?id=1062
#include <iostream> #include <cstring> #include <queue> using namespace std; int m,n; struct adjlist{ int c[101],t[101]; }a[101]; int d[101],tm[101],l[101],r[101]; queue<int >que; int abs(int x){ return x>0?x:-x; } int spfa(int ls,int ll){ que.push(1); int f,t; r[1]=0; while(!que.empty()){ f=que.front(); que.pop(); for(int i=0;i<tm[f];i++){ t=a[f].t[i]; if(l[t]<=ll&&l[t]>=ls&&r[t]>r[f]+a[f].c[i]){ r[t]=r[f]+a[f].c[i]; que.push(t); } } } int minn=1000000; for(int i=1;i<=n;i++){ minn=min(minn,r[i]+d[i]); } return minn; } int main(){ ios::sync_with_stdio(false); int temp; cin>>m>>n; for(int i=1;i<=n;i++){ cin>>d[i]>>l[i]>>tm[i]; temp=tm[i]; for(int j=0;j<temp;j++){ cin>>a[i].t[j]>>a[i].c[j]; } } int ans=10000; for(int i=l[1]-m;i<=l[1];i++){ for(int j=1;j<=n;j++)r[j]=100000; ans=min(ans,spfa(i,i+m)); } cout<<ans<<endl; return 0; }