全RE。。。
查看原帖
全RE。。。
342076
Union_of_Britainschanghang楼主2020/12/28 22:45

弱化版上是AC,dijkstra+邻接表

#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int u,v,w;
int num_edge=0;
int head[500005];
int dis[500005];
bool vis[10005]={0};
struct Edge
{
  int next,to,dis;
}edge[500005];
void addedge(int from,int to,int dis) 
{
  edge[++num_edge].next=head[from];
  edge[num_edge].to=to; 
  edge[num_edge].dis=dis;
  head[from]=num_edge;
}
long long dist[10005];
priority_queue<pair<int,int> > q;
#define inf 2<<31-1
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m>>s;
    for(register int i=1;i<=n;i++)
	{
		dist[i]=1e10;
	}
    for(register int i=1;i<=m;i++)
    {
        cin>>u>>v>>w;
        addedge(u,v,w);
    }
    q.push(make_pair(0,s));
    dist[s]=0;
    while(!q.empty())
    {
        int b=q.top().second; int d=q.top().first;q.pop();
        if(vis[b])
        {
            continue;
        }
        if(-d!=dist[b])continue;
        vis[b]=1;
       
        for(int i=head[b];i;i=edge[i].next)
        {
            int u1=edge[i].to;
            if(dist[u1]>edge[i].dis+dist[b])
            {
                dist[u1]=edge[i].dis+dist[b];
                q.push(make_pair(-dist[u1],u1));
            }
        }
    }
    for(register int i=1;i<=n;i++)
    {
        cout<<dist[i]<<" ";
    }
    return 0;
}
2020/12/28 22:45
加载中...