您的位置:首页 > 其它

POJ 1062 昂贵的礼物

2013-05-18 19:25 190 查看
最短路问题

#include<iostream>
#include<cstring>
using namespace std;
const int inf=0xfffffff;
int dis[101],vis[101],map[101][101],v[101];
int n,m;
int dijkstra()
{
int i,j,sd,node;
for(i=1;i<=n;i++)
dis[i]=map[0][i];
for(i=0;i<n;i++)
{
sd=inf;node=0;
for(j=1;j<=n;j++)
{
if(!vis[j] && sd>dis[j])
{
sd=dis[j];node=j;
}
}
if(node==0) break;
vis[node]=1;
for(j=1;j<=n;j++)
{
if(!vis[j] && map[node][j]>0 && dis[j]>dis[node]+map[node][j]) dis[j]=dis[node]+map[node][j];
}
}
return dis[1];
}
int main()
{
int i,j,l,x,t,max,min=inf;
memset(dis,0,sizeof(dis));
memset(vis,inf,sizeof(vis));
memset(map,0,sizeof(map));
memset(v,0,sizeof(v));
cin>>m>>n;
for(i=1;i<=n;i++)
{
cin>>map[0][i]>>v[i]>>x;
for(j=0;j<x;j++)
{
cin>>t>>l;
map[t][i]=l;
}
}
for(i=1;i<=n;i++)
{
max=v[i];
for(j=1;j<=n;j++)
{
if(v[j]>max || max-v[j]>m) vis[j]=1;
else vis[j]=0;
}
t=dijkstra();
if(min>t) min=t;
}
cout<<min<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: