#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define min(a,b)(a<b?a:b)
#define max(a,b)(a>b?a:b)
#define size 110
#define inf 0x7f7f7f7f
int map[size][size],dis[size],vis[size],m,n,dengji[size];
int judge(int a,int b,int i)
{
if(dengji[i]>=a&&dengji[i]<=b)
return 1;
return 0;
}
void dij(int a,int b)
{
int i,j,k,min,t;
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
for(i=1;i<=n;i++)
if(judge(a,b,i))
dis[i]=map[0][i];
vis[0]=1; k=0;
for(i=1;i<=n;i++)
{
min=inf;
for(j=1;j<=n;j++)
{
if(!vis[j]&&judge(a,b,j)&&dis[j]<min)
{
min=dis[j];
t=j;
}
}
vis[t]=1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&judge(a,b,j)&&dis[j]>dis[t]+map[t][j])
dis[j]=map[t][j]+dis[t];
}
}
}
int main()
{
int i,j,k,a,b;
scanf("%d%d",&m,&n);
memset(map,127,sizeof(map));
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&map[0][i],&dengji[i],&k);
for(j=1;j<=k;j++)
{
scanf("%d%d",&a,&b);
map[a][i]=b;
}
}
int ans=inf;
for(i=dengji[1]-m;i<=dengji[1];i++)//保证在等级允许范围内
{
dij(i,i+m);
ans=min(ans,dis[1]);
}
printf("%d\n",ans);
return 0;
}
POJ 1062 昂贵的聘礼
最新推荐文章于 2020-02-28 17:13:33 发布