板子题求助 WA #3 #6
查看原帖
板子题求助 WA #3 #6
696967
int_Hello_world楼主2023/2/15 19:58

rt >_<。

#include<bits/stdc++.h>
using namespace std;
inline int read() {
	int x=0,f=0;char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) f|=(ch=='-');
    for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
	return f?-x:x;
}
int now,head[10213111],cnt,n,m,x,y,z,X[1012313],Y[1023131];
double dis1[1021313],dis2[1023113],d,dist;
double ss(int a1,int b1,int a2,int b2) {
	return double(sqrt((a1-a2)*(a1-a2)*1.00+(b1-b2)*(b1-b2)*1.00));
}
struct node{
	int next,to;
	double w;
}e[10231311];
void add(int u,int v,double w) {
	e[++cnt].next=head[u];
	e[cnt].to=v;
	e[cnt].w=w;
	head[u]=cnt;
}
void dj() {
	priority_queue<double,vector<pair<double,int> >,greater<pair<double,int> > >q;
	for (int i=1;i<=n;++i) dis1[i]=99999999.99,dis2[i]=99999999.99;
	dis1[1]=0;
	q.push(make_pair(0.00,1));
	while(!q.empty()) {
		dist=q.top().first;
		now=q.top().second;
		q.pop();
		for (int i=head[now];i;i=e[i].next) {
			if (dis1[e[i].to]>dist+e[i].w) {
				dis2[e[i].to]=dis1[e[i].to];
				dis1[e[i].to]=dist+e[i].w;
			    q.push(make_pair(dis1[e[i].to],e[i].to));
			    q.push(make_pair(dis2[e[i].to],e[i].to));
			}
			else if (dis2[e[i].to]>dist+e[i].w&&dis1[e[i].to]!=dist+e[i].w){
				dis2[e[i].to]=dist+e[i].w;
			    q.push(make_pair(dis2[e[i].to],e[i].to));
			} 
		}
	}
}
signed main(){
    n=read(); m=read();
    for (int i=1;i<=n;++i) {
    	X[i]=read(); 
		Y[i]=read();
	}
    for (int i=1;i<=m;++i) {
    	x=read(); y=read();
    	d=ss(X[x],Y[x],X[y],Y[y]);
    	add(x,y,d); 
		add(y,x,d);
	}
    dj();
    if (dis2[n]!=dis1[n]) printf("%.2lf",dis2[n]);
    else cout<<-1;
	return 0;
}
2023/2/15 19:58
加载中...