初学dijkstra 求错
查看原帖
初学dijkstra 求错
1020370
ztt0430楼主2024/4/1 20:17
#define int long long
using namespace std;
struct node{
	int to,val;
	bool operator <(const node &b) const{
		return val>b.val;
	}
};
int n,m;
vector <node> fir[1003],sec[1003];
int ans;
priority_queue<node> q;
int dis[1003];
bool book[1003];
void bfs(){
	q.push({1,0});
	while(!q.empty()){
		int now =(q.top()).to;
		q.pop();
		if(book[now])continue;
		book[now]=1;
		for(int i=0;i < (fir[now].size());i++){
			if(dis[now]+fir[now][i].val<dis[fir[now][i].to]){
				dis[fir[now][i].to]=dis[now]+fir[now][i].val;
				q.push({fir[now][i].to,dis[fir[now][i].to]});
			}
		}
	}
}
void bfs2(){
	q.push({1,0});
	while(!q.empty()){
		int now =(q.top()).to;
		q.pop();
		if(book[now])continue;
		book[now]=1;
		for(int i=0;i < (sec[now].size());i++){
			if(dis[now]+sec[now][i].val<dis[sec[now][i].to]){
				dis[sec[now][i].to]=dis[now]+sec[now][i].val;
				q.push({sec[now][i].to,dis[sec[now][i].to]});
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		fir[x].push_back({y,z});
		sec[y].push_back({x,z});
	}
	for(int i=2;i<=n;i++)dis[i]=0x3f3f3f3f;
	bfs();
	book[1]=0;dis[1]=0;
	for(int i=2;i<=n;i++)
	{
		ans+=dis[i];
		dis[i]=0x3f3f3f3f;
		book[i]=0;
	}
	cout<<ans<<endl;
	bfs2();
	for(int i=2;i<=n;i++)ans+=dis[i];
	cout<<ans;
}
2024/4/1 20:17
加载中...