dijkstra标准版过了but弱化版60
查看原帖
dijkstra标准版过了but弱化版60
471331
Harley_Wu楼主2024/11/7 20:35

求条pls

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s;
int head[100010],cnt;
int dis[100010];
bool b[100010];
struct edge
{
	int to;
	int nextt;
	int wei;
} edge[200010];
struct priority
{
    int dis;
    int id;
    bool operator <(const priority &x)const
    {
        return x.dis<dis;
    }
};
void addedge(int x,int y,int z)
{
	edge[++cnt].to=y;
	edge[cnt].wei=z;
	edge[cnt].nextt=head[x];
	head[x]=cnt;
}
priority_queue<priority> q;
void dijkstra(int x)
{
	q.push((priority){0,x});
	for(int i=1;i<=n;i++) b[i]=0;
	int t;
	while(q.empty()==0)
	{
		priority temp=q.top();
        q.pop();
        t=temp.id;
		if(!b[t])
        {
        	b[t]=1;
	        for(int i=head[t];i;i=edge[i].nextt)
	        {
	            int v=edge[i].to;
	            if(dis[v]>dis[t]+edge[i].wei)
	            {
	                dis[v]=dis[t]+edge[i].wei;
	                if(!b[v]) q.push((priority){dis[v],v});
	            }
	        }
		}
	}
}

signed main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++) dis[i]=2100000000;
	dis[s]=0;
	int u,v,wt;
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v>>wt;
		addedge(u,v,wt);
		//addedge(v,u,wt);
	}
	dijkstra(s);
	for(int i=1;i<=n;i++)  cout<<dis[i]<<" ";
	return 0;
} 
2024/11/7 20:35
加载中...