求助/fad
  • 板块学术版
  • 楼主Lovable_Wind
  • 当前回复14
  • 已保存回复14
  • 发布时间2020/11/29 20:17
  • 上次更新2023/11/5 07:04:23
查看原帖
求助/fad
112631
Lovable_Wind楼主2020/11/29 20:17
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
struct node{
	int v,w;
	node(int vv,int ww){
		v=vv,w=ww;
	}
};
struct pink{
	int v,w;
	pink(int vv,int ww){
		v=vv,w=ww;
	}
	bool operator < (const pink &x)const
    {
       return w>x.w;
    }
};
priority_queue<pink> pq;
vector<node> g[100010];
int d[100010],n,m,s;
int vis[100010];
int read()
{
    int ans=0,flag=1;
    char ch=getchar();
    while( (ch>'9' || ch<'0') && ch!='-' ) ch=getchar();
    if(ch=='-') flag=-1,ch=getchar();
    while(ch>='0' && ch<='9') ans=ans*10+ch-'0',ch=getchar();
    return ans*flag;
}
int main()
{
	cin>>n>>m>>s;
	for (int i=1;i<=n;i++){
		d[i]=2147483647;
	}
	for (int i=1;i<=m;i++){
		int x,y,dis;
		cin>>x>>y>>dis;
		g[x].push_back(node(y,dis));
		//g[y].push_back(x,dis);
	}
	d[s]=0;
	for (int i=1;i<=n;i++){
		int v=0,mind=inf;
		v=pq.top().v;
		mind=pq.top().w;
		if (mind==inf)
			break;
		pq.pop();
		for (int j=0;j<g[v].size();j++){
			if (d[g[v][j].v]>(g[v][j].w+d[v])){
				d[g[v][j].v]=g[v][j].w+d[v],d[g[v][j].v];
				pq.push(pink(g[v][j].v,d[g[v][j].v]));
			}
		}
	}
	for (int i=1;i<=n;i++){
		cout<<d[i]<<' ';
	}
}

正常dij没问题,用优先队列优化就出锅了(

2020/11/29 20:17
加载中...