dijkstra 60分求助
  • 板块P3905 道路重建
  • 楼主liyz007
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/17 21:09
  • 上次更新2024/10/17 23:35:16
查看原帖
dijkstra 60分求助
757379
liyz007楼主2024/10/17 21:09

WA了 7,8,9,10 四个点

#include<bits/stdc++.h>
using namespace std;
const int N=110;
struct E{
	int to,nxt,w;
}e[N*N];
struct node{
	int dis,id;
	bool operator<(const node&a)const{
		return a.dis<dis;
	}
};
priority_queue<node>q;
int n,m,d,A,B,cnt;
int dis[N],a[N],head[N];
bool vis[N];
void add(int u,int v,int w){
	e[++cnt].to=v;
	e[cnt].nxt=head[u];
	a[cnt]=w;
	head[u]=cnt;
}
void dijkstra(){
	dis[A]=0;
	q.push(node{0,A});
	while(!q.empty()){
		node x=q.top();q.pop();
		int u=x.id;
		if(vis[u]) continue;
		vis[u]=true;
		for(int i=head[u];i;i=e[i].nxt){
			int v=e[i].to;
			if(dis[v]>dis[u]+e[i].w){
				dis[v]=dis[u]+e[i].w;
				q.push(node{dis[v],v});
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	memset(dis,0x3f,sizeof(dis));
	int x,y,z;
	for(int i=1;i<=m;i++){
		cin>>x>>y>>z;
		add(x,y,z);add(y,x,z);
	}
	cin>>d;
	for(int i=1;i<=d;i++){
		cin>>x>>y;
		for(int j=head[x];j;j=e[j].nxt)
			if(e[j].to==y)
				e[j].w=a[j];
		for(int j=head[y];j;j=e[j].nxt)
			if(e[j].to==x)
				e[j].w=a[j];
	}
	cin>>A>>B;
	dijkstra();
	cout<<dis[B]<<endl;
	return 0;
}
2024/10/17 21:09
加载中...