WA求调
查看原帖
WA求调
542221
KidA楼主2023/9/29 11:02

我的这份代码不知道为什么每次无解的情况总是输出 45574308887988303994557430888798830399,求助大佬们qwq。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,m,k;
int dis[400031];
struct EdgeInfo{
	int to,w;
};
struct NodeMessage{
    int pos,tme;
    friend bool operator < (NodeMessage a,NodeMessage b){
        return a.tme>b.tme;
    }
};
vector<EdgeInfo> G[800031];

void dijkstra(){
	memset(dis,0x3f,sizeof(dis));
	priority_queue<NodeMessage> pq;
	pq.push({1,0});
	while(!pq.empty()){
		int npos=pq.top().pos,ntme=pq.top().tme; pq.pop();
		if(ntme>dis[npos]) continue;
		dis[npos]=ntme;
		//if(vis[now.pos]) continue; vis[now.pos]=1;
		for(EdgeInfo &i:G[npos])
			if(dis[i.to]>ntme+i.w)
				pq.push({i.to,ntme+i.w});
	}
}

signed main(){
	cin>>n>>m>>k;
	for(int i=1,u,v,w;i<=m;i++){
		cin>>u>>v>>w;
		if(w==1) G[u].push_back({v,1}),G[v].push_back({u,1});
		else G[u+n].push_back({v+n,1}),G[v+n].push_back({u+n,1});
	}
	for(int i=1,x;i<=k;i++){
		cin>>x;
		G[x].push_back({x+n,0}),G[x+n].push_back({x,0});
	}
	dijkstra();
	int ans=min(dis[n],dis[n+n]);
	if(ans==0x3f3f3f3f) cout<<-1;
	else cout<<ans;
	return 0;
}
2023/9/29 11:02
加载中...