poj1062昂贵的聘礼

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct edge{
    int from,to,cost;
};
struct vertex{
    int value,rank;
};
const int Max=110;
const int INF=0x7fffffff;
edge es[Max*Max];
vertex v[Max];
int dist[Max],en=1;
int ans=0x7fffffff;
void bellman(int n, int m){
    int i;
    dist[0]=0;
    while(true){
        bool update=false;
        for(i=1;i<en;i++){
            edge e=es[i];
            if(v[e.to].rank<n||v[e.to].rank>m)
                continue;
            if(dist[e.from]!=INF&&dist[e.to]>dist[e.from]+e.cost){
                dist[e.to]=dist[e.from]+e.cost;
                update=true;
            }
        }
        if(!update)break;
    }
}
int main()
{

    int r,n,j,k,i,vn,dis;
    cin>>r>>n;
    for(j=0;j<=n;j++){dist[j]=INF;}
    for(i=1;i<=n;i++){
        cin>>v[i].value>>v[i].rank>>j;
        es[en].cost=v[i].value;
        es[en].from=0;
        es[en++].to=i;
        for(k=1;k<=j;k++){
            cin>>vn>>dis;
            es[en].from=vn;
            es[en].to=i;
            es[en++].cost=dis;
        }
    }
    v[0].rank=v[1].rank;
    for(i=v[1].rank-r;i<=v[1].rank;i++){
        bellman(i,i+r);
        if(ans>dist[1]){
            ans=dist[1];
        }
    }
    
    cout<<ans<<endl;
}
View Code
原文地址:https://www.cnblogs.com/Neptunes/p/3412896.html