• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

nyist 510昂贵的聘礼

/*
好好的图论题啊,最短路的应用,dijkstra算法 
*/
#include <iostream>
using namespace std;
const int INF=100000;
int a[105][105],b[105],c[105],s[105],dist[105];
int n,m;
int dj(int p,int q)
{
	int i,j,r,t,k=0;
	for(i=0;i<n;i++)
	if((b[i]>=p&&b[i]<=q)) dist[i]=a[k][i], s[i]=0; else dist[i]=INF,s[i]=0;
	dist[0]=0; s[0]=1;
	for(i=1;i<n;i++)
	{
		t=INF;
		for(j=0;j<n;j++)
		if(!s[j]&&dist[j]<t) t=dist[j],k=j;
		s[k]=1;
		for(j=0;j<n;j++)
		if(!s[j]&&a[k][j]<INF&&b[j]>=p&&b[j]<=q)
		{
			r=dist[k]+a[k][j];
			if(dist[j]>r) dist[j]=r;
		}
	}
	t=c[0];
	for(i=0;i<n;i++)
    if(dist[i]+c[i]<t) t=dist[i]+c[i];
		return t;
}
int main(int argc, char *argv[])
{
	int i,j,k,p,q,l,r;
	while(cin>>m>>n&&(m||n))
	{
		for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		a[i][j]=INF;
	for(i=0;i<n;i++)
	{
		
		cin>>c[i]>>b[i]>>k;
	    for(j=0;j<k;j++)
	    {
	    cin>>p>>q;
	    a[i][p-1]=q;
	    }
	}
	r=c[0];
     for(i=b[0]-m;i<=b[0];i++)
     {
	 k=dj(i,i+m);
	 if(k<r) r=k;
     }
     cout<<r<<endl;
	}
	return 0;
}        


posted @ 2013-08-17 22:49  Class Xman  阅读(120)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3