⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3181949_wa.cpp

📁 北大大牛代码 1240道题的原代码 超级权威
💻 CPP
字号:
#include <stdio.h>
#include <math.h>
#include <queue>
#include <vector>
#define MAXN 50010
#define inf 2100000000

using namespace std;

struct point
{
	double x, y;
};

struct node
{
	int u;
	double t;
};

vector <node> map[MAXN];
point pt[MAXN];
double dis[MAXN];
queue <node> que;

double dist(int a,int b)
{
	return hypot(pt[a].x-pt[b].x,pt[a].y-pt[b].y);
}

struct NODE
{
	int a, b;
	double t;
}bak[200001];

int main()
{
	int n, m;
	double v, t;
	int a, b;
	int i;

	scanf("%d%d%lf",&n,&m,&v);
	for(i = 1; i <= n; i++)
	{
		scanf("%lf%lf",&pt[i].x,&pt[i].y);
	}
	for(i = 0; i < m; i++)
	{
		scanf("%d%d%lf",&bak[i].a,&bak[i].b,&bak[i].t);
	}
	scanf("%lf%lf%lf%lf",&pt[0].x,&pt[0].y,&pt[n+1].x,&pt[n+1].y);
	for(i = 0; i < m; i++)
	{
		a = bak[i].a;
		b = bak[i].b;
		t = bak[i].t;
		double disa = dist(a,0);
		double disb = dist(b,0);
		if(disa == disb)
			continue;
		node pp;
		pp.t = t;
		if(disa < disb)
		{
			pp.u = b;
			map[a].push_back(pp);//((node){b,t});
		}
		else
		{
			pp.u = a;
			map[b].push_back(pp);//((node){a,t});
		}
	}
	n = n+2;
	for(i = 0; i < n; i++)
	{
		dis[i] = inf;
	}
	dis[0] = 0;
	node tmp;
	tmp.t = 0;
	tmp.u = 0;
	que.push(tmp);//((node){0,0});
	while(!que.empty())
	{
		tmp = que.front();
		que.pop();
		for(i = 0; i < map[tmp.u].size(); i++)
		{
			node tt = map[tmp.u][i];
			double dis1 = dist(tt.u,0);
			double dis2 = dist(tmp.u,0);
			double tm = dis1 / v;

			if(tt.u==n-1||(dis1 > dis2 && tm > tmp.t+tt.t))
			{
				if(dis[tt.u] > tmp.t+tt.t)
				{
					dis[tt.u] = tmp.t+tt.t;
					node pp;
					pp.t = dis[tt.u];
					pp.u = tt.u;
					que.push(pp);//((node){tt.u,dis[tt.u]});
				}
			}
		}
	}
	if(dis[n-1]==inf)
		puts("Impossible");
	else
		printf("%.0lf\n",dis[n-1]);
	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -