Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

dijksta 32ms

Posted by count_if at 2014-12-20 13:50:56 on Problem 1062
#include<iostream>
#include<stdio.h>
#include<vector>
#include<memory.h>
#include<queue>
using namespace std;
const int Max = 1<<30;
int M,N;
int Min;
int minlevel,maxlevel;
int Price[20000];
int Level[20000];

struct node{
	node(){}
	node(int x,int y){
		value = x;
		v = y;
	}
	bool operator <(const node rhs)const {
		return value>rhs.value;
	}
	int value;
	int v;
};
priority_queue<node> Q;
vector<vector<node>  >G;
int dijkstra(){
	int res = Max;
	Q.push(node(0,1));//设置为酋长开始 
	while (!Q.empty()){
		node cur = Q.top();
		Q.pop();
		int v = cur.v;

		if (cur.value > res)//剪枝
			continue;

		int length = G[v].size();
		for (int i = 0;i<length;++i){
			if (Level[G[v][i].v] >= minlevel && Level[G[v][i].v] <=maxlevel )
				Q.push(node(cur.value+G[v][i].value,G[v][i].v) );
		}
		if (cur.value + Price[cur.v] < res)
			res = cur.value +Price[cur.v];
	}

	return res;

}
int main(){
	cin>> M>>N;
	int X;
	int p,l,value;
	Min = Max;
	G.resize(N+1);
	for (int i= 1;i<= N;++i){
		cin >> Price[i] >> Level[i]>>X;
		for (int j = 0;j<X;++j){
			int id,price;
			cin >>  id >> price;
			G[i].push_back(node(price,id));
		}
	}
	int qiuLevel = Level[1];
	
	for (int i = qiuLevel-M;i<=qiuLevel;++i ){
		minlevel = i;
		maxlevel = i+M;
		int ans = dijkstra();
		if(Min > ans )
			Min = ans;
	}
	printf("%d\n",Min);

	return 0;

}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator