比赛 20150423 评测结果 EWWWWWWWWWWWWWW
题目名称 马拉松2 最终得分 0
用户昵称 wolf. 运行时间 0.213 s
代码语言 C++ 内存使用 0.25 MiB
提交时间 2015-04-23 10:54:35
显示代码纯文本
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
ifstream fin("marathonb.in");
ofstream fout("marathonb.out");
class node{
public:
	int x,y;
	node(){
	}
	node(int a,int b){
		x=a;
		y=b;
	}
};
class state{
public:
	int p,k;
	state(){
	}
	state(int a,int b){
		p=a;
		k=b;
	}
};
const int IMAX=999999999;
vector<node> PP;
int calc(int x1,int y1,int x2,int y2){
	return abs(x1-x2)+abs(y1-y2);
}
int ana(int a,int b){
	return calc(PP[a].x,PP[a].y,PP[b].x,PP[b].y);
}
long long core(int n,int k){
	vector<int> dis;
	dis.resize(n,IMAX);
	queue<state> Q;
	dis[0]=0;
	Q.push(state(0,k));
	while(!Q.empty()){
		state it=Q.front();
		Q.pop();
		for(int i=it.p+1;i<=it.k+it.p+1;++i){//it.p--> i
			int r=ana(it.p,i);
			if(dis[i]>dis[it.p]+r){
				dis[i]=dis[it.p]+r;
				Q.push(state(i,it.k-(i-(it.p+1))));
			}
		}
	}
	return dis[n-1];
}
int main(){
	int n,k;
	fin>>n>>k;
	for(int i=0;i!=n;++i){
		int a,b;
		fin>>a>>b;
		PP.push_back(node(a,b));
	}
	fout<<core(n,k);
	return 0;
}
//designde by wolf