码迷,mamicode.com
首页 > 其他好文 > 详细

POJ1062 Expensive dowry 【最短路dijkstra】

时间:2014-05-31 23:10:48      阅读:500      评论:0      收藏:0      [点我收藏+]

标签:dijkstra

详细看:http://blog.csdn.net/lyy289065406/article/details/6645852

简单说一下:每个物品是一个结点,边的权值是,edge[u][v]的值表示用物品u换物品v的价格

一开始所有物品都置为原价,即所有dist[i]为原价,用dijkstra算法,算出0点(啥物品都没有)到各点的最短距离,求出dist[1]即为花费

枚举每个物品的等级为这条交易链的最高等级,把所有等级高于它的或者比它小超过等级限制的点都剔除,可以用bool数组剔除,然后用上述的dijkstra

注意一个问题:

 最好一开始dist全置为最大值int_max,然后你把所有点赋值原价格也好,仅仅把可行点(满足上述权值条件的点)赋原价格也好,如果点1被剔除了则continue也好,不continue也好,都对。反之,则有可能错,比如,你一开始把所有dist都置为0(或者所有可行点置为原价(此时点1有可能已经被剔除而你没有continue,进入了dijkstra算法中)),dist[1]还是0,结果return dist[1],就WA了。

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int SIZE=11111;
int level,n;
int price[SIZE];
int lev[SIZE];
int x[SIZE];
int g[SIZE][SIZE];
int dist[SIZE];
bool visit[SIZE];
void init_input()
{
	int u,v;
	cin>>level>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>price[i]>>lev[i]>>x[i];
		for(int j=1;j<=x[i];j++)
		{
			cin>>u>>v;
			g[u][i]=v;
		}
	}
}
int dijkstra(int v0)
{
	for(int i=1;i<=n;i++)
	{
			dist[i]=price[i];
	}
	for(int i=1;i<=n;i++)
	{
		int node=0;
		int min=(1<<31)-1;
		for(int ii=1;ii<=n;ii++)
		{
			if(!visit[ii]&&dist[ii]<min)
			{
				min=dist[ii];
				node=ii;
			}
		}
		if(node==0)
			break;
		visit[node]=true;
		for(int ii=1;ii<=n;ii++)
		{
			if(!visit[ii]&&g[node][ii]>0&&dist[ii]>dist[node]+g[node][ii])
			{
				dist[ii]=dist[node]+g[node][ii];
			}
		}
	}
	return dist[1];
}
int main()
{
	#ifndef ONLINE_JUDGE
		freopen("G:/1.txt","r",stdin);
		freopen("G:/2.txt","w",stdout);
	#endif
	init_input();
	int mxlevel;
	int minans=(1<<31)-1;
	int tmpans;
	for(int i=1;i<=n;i++)
	{
		mxlevel=lev[i];
		for(int ii=1;ii<=n;ii++)
		{
			if(lev[ii]>mxlevel||mxlevel-lev[ii]>level)
				visit[ii]=true;
			else
				visit[ii]=false;
		}
		tmpans=dijkstra(i);
		//cout<<tmpans<<endl;
		minans=min(minans,tmpans);
	}
	cout<<minans<<'\n';
}


 

POJ1062 Expensive dowry 【最短路dijkstra】,布布扣,bubuko.com

POJ1062 Expensive dowry 【最短路dijkstra】

标签:dijkstra

原文地址:http://blog.csdn.net/u011775691/article/details/27830691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!