dijkstra 昂贵的聘礼 poj1062

原创 2015年11月19日 19:11:58

dijkstra 复杂度n^2;

两个集合n次,每次找到最小的,然后放入集合a,标记为访问过

然后让这个最小的去更新那些没有访问过的

这道题,关键是等级差距不能超过m,那么就枚举每一个最小的等级,然后对应每个区间找

/********************************************
Author         :Crystal
Created Time   :
File Name      :
********************************************/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#include <cctype>
using namespace std;
typedef long long ll;
typedef pair<int ,int> pii;
#define MEM(a,b) memset(a,b,sizeof a)
#define CLR(a) memset(a,0,sizeof a);
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
//#define LOCAL
int l[200];
int p[200];
int vis[200];
int mp[200][200];
int m,n;
int dis[200];
void dijkstra(){
	dis[0] = 0;
	for(int i=1;i<=n;i++){
		dis[i] = p[i];
	}
	for(int i=1;i<=n;i++){
		int nmin = inf;
		int k;
		for(int j=1;j<=n;j++){
			if(!vis[j] && dis[j]<nmin){
				nmin = dis[j];
				k = j;
			}
		}
		vis[k] = 1;
		for(int j=1;j<=n;j++){
			if(!vis[j] && dis[j]>dis[k]+mp[k][j]){
				dis[j] = dis[k] + mp[k][j];
			}
		}
	}
}
int main()
{
#ifdef LOCAL
	freopen("in.txt", "r", stdin);
//	freopen("out.txt","w",stdout);
#endif
	while(cin >> m >> n){
		MEM(mp,inf);
		for(int i=1;i<=n;i++){
			int x;
			cin >> p[i] >> l[i] >> x;
			for(int j=1;j<=x;j++){
				int t,v;cin >> t >> v;
				mp[t][i] = min(mp[t][i],v);
			}
		}
		int ans = inf;
		for(int i=1;i<=n;i++){
			int nmin = l[i];
			for(int j=1;j<=n;j++){
				if(l[j] < nmin || l[j] - nmin > m){
					vis[j] = 1;
				}
				else vis[j] = 0;
			}
			dijkstra();
			ans = min(ans,dis[1]);
		}
		cout << ans << endl;
	}
	return 0;
}









poj1062 昂贵的聘礼 最短路

PS:中文题太爽了。。 题意:中文题我就不写题意了。。。 分析:我感觉要注意两点。。。1.注意等级限制,我本来以为只有在相邻的两个人物中有等级的限制,其实在你需要交换的所有人都有等级的限制。。。2.建...
  • liuqiyao_01
  • liuqiyao_01
  • 2013年05月04日 09:35
  • 7199

poj 1062 昂贵的聘礼 Dijkstra算法,中等难度,,,内有测试数据,一道让我累觉不爱的题目

昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38474   Accepted: 11132 ...
  • Lionel_D
  • Lionel_D
  • 2015年02月21日 16:15
  • 1773

POJ 1062 昂贵的聘礼(限制的最短路)

昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status ...
  • Inite
  • Inite
  • 2016年03月27日 13:55
  • 481

POJ - 1062 昂贵的聘礼 解题报告

昂贵的聘礼 POJ - 1062   终于有一到中文的题了,好激动。哈哈哈。。。 题目大意: ez要去搞对象,酋长的女儿。那不就是寒冰嘛。。。。  大概就是个Bellford-Ford算法。开始理解...
  • qq_36306833
  • qq_36306833
  • 2017年02月03日 17:44
  • 309

【POJ 1062】 昂贵的聘礼

【POJ 1062】 昂贵的聘礼
  • ChallengerRumble
  • ChallengerRumble
  • 2015年06月20日 00:45
  • 1208

poj1062 昂贵的聘礼 dijkstra

N件物品分别有自己的价值及地位,有些可以被另一件及一个优惠价来替换,选择出的任意两件之间的地位差不超过m,求第一件的最低价; 最开始想用dfs,无情的爆栈了; 强行构图,以每件的价值为点,替换的优...
  • zchahaha
  • zchahaha
  • 2016年01月18日 20:40
  • 323

Dijkstra POJ1062 昂贵的聘礼

题目是中文,= =我却dan
  • Hatsune__Miku
  • Hatsune__Miku
  • 2014年06月30日 20:20
  • 247

poj1062昂贵的聘礼(dijkstra)

#include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; int n,m;...
  • u012198382
  • u012198382
  • 2014年08月20日 22:00
  • 308

poj1062 昂贵的聘礼 Dijkstra

昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 46772   Accepted: 13905 ...
  • kyoma
  • kyoma
  • 2016年12月16日 19:13
  • 196

POJ1062 昂贵的聘礼(dijkstra)

题目链接:点击打开链接 读入数据后,扫一遍物品,每一遍都根据等级关系标记这个物品是否可以使用,进行一次dijkstra,求出最小花费金币数。 AC代码: #include "io...
  • GKHack
  • GKHack
  • 2015年10月08日 07:39
  • 809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dijkstra 昂贵的聘礼 poj1062
举报原因:
原因补充:

(最多只允许输入30个字)