WA求调
查看原帖
WA求调
763878
Jerry_heng楼主2023/9/18 21:48
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt,head[200010],dis[200010],inf;
bool vis[200010];
struct node{
	int to,nxt,val;
}edge[600010];
struct nodd{
	int id,val;
	bool operator<(const nodd &x)const{
		return val<x.val;
	}
};
priority_queue<nodd> q;
void add(int u,int v,int w){
	edge[++cnt]=(node){v,head[u],w};
	head[u]=cnt;
}
void dijkstra(){
	memset(dis,0x3f3f3f3f,sizeof dis);
	inf=dis[0];
	dis[1]=0;
	q.push((nodd){1,0});
	while(!q.empty()){
		int u=q.top().id;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=edge[i].nxt){
			int v=edge[i].to;
			if(dis[v]>dis[u]+edge[i].val){
				dis[v]=dis[u]+edge[i].val;
				if(!vis[v])q.push((nodd){v,dis[v]});
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)add(i,i+n,0);
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v+n,u+n,w);
	}
	dijkstra();
	for(int i=2;i<=n;i++)
		if(dis[i+n]>=inf)cout<<-1<<" ";
		else cout<<min(dis[i],dis[i+n])<<" ";
	return 0;
} 

2023/9/18 21:48
加载中...