Help
查看原帖
Help
1050501
ATION001楼主2024/12/1 13:03

只有 10 分,求调。

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
	int fi,se;
	bool operator<(const node &T)const{
		return fi>T.fi;
	}
};
int n,m,dis[105],fa[125];
bool vis[105];
vector<node>v[105];
vector<int>ans;
void Dijkstra(int Begin){
	fill(dis,dis+n+1,-1e18);
	fill(vis,vis+n+1,false);
	dis[Begin]=0;
	priority_queue<node>q;
	q.push({dis[Begin],Begin});
	while(q.size()){
		auto p=q.top();
		q.pop();
		if(!vis[p.se]){
			vis[p.se]=true;
			for(auto z:v[p.se]){
				if(!vis[z.fi]&&dis[z.fi]<dis[p.se]+z.se){
					dis[z.fi]=dis[p.se]+z.se;
					q.push({dis[z.fi],z.fi});
				}
			}
		}
	}
	return;
}
void TREE(){
	for(int i=1;i<=n;i++){
		for(auto z:v[i]){
			if(dis[z.fi]==dis[i]+z.se){
				fa[z.fi]=i;
			}
		}
	}
	return;
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	n++;
	for(int i=1,x,y,z;i<=m;i++){
		cin>>x>>y>>z;
		v[x].push_back({y,z});
	}
	Dijkstra(1);
	cout<<dis[n]<<'\n';
	TREE();
	for(int i=n;i;i=fa[i]){
		ans.push_back(i);
	}
	sort(ans.begin(),ans.end());
	for(auto z:ans){
		cout<<z<<' ';
	}
	return 0;
}
2024/12/1 13:03
加载中...