只过样例求助
查看原帖
只过样例求助
275860
___A__楼主2024/1/27 22:11
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int s,t,n,m,k,dis[N],cnt[N];
struct graph{
	int u,w;
};
int operator<(graph x,graph y){
	return x.w>y.w;
}
vector<graph>g[N],inv[N];
void bfs(int s){
	memset(dis,-1,sizeof(dis));
	priority_queue<graph>q;
	q.push({s,0});
	while(!q.empty()){
		auto [u,w]=q.top();
		q.pop();
		if(dis[u]==-1){
			dis[u]=w;
			for(auto [v,tmpw]:inv[u]){
				if(dis[v]==-1){
					q.push({v,w+tmpw});
				}
			}
		}
	}
}
struct status{
	int u,w,real;
};
int operator<(status x,status y){
	return x.w>y.w;
}
void Astar(int s){
	priority_queue<status>q;
	q.push({s,dis[s],0});
	while(!q.empty()){
		auto [u,w,real]=q.top();
		q.pop();
		cnt[u]++;
		if(u==t){
			cout<<real<<'\n';
		}
		if(cnt[t]==k){
			return;
		}
		for(auto [v,tmpw]:g[u]){
			q.push({v,w+tmpw+dis[v],real+tmpw});
		}
	}
}
int main(){
	cin>>n>>m>>k;
	for(int u,v,w;m--;){
		cin>>u>>v>>w,g[u].push_back({v,w}),inv[v].push_back({u,w});
	}
	s=n,t=1;
	bfs(t),Astar(s);
	for(int i=1;i<=k-cnt[t];i++){
		cout<<"-1\n";
	}
}
2024/1/27 22:11
加载中...