WA了1、3、4、5四个点……
用的是最普通的dij优化
求求大佬们帮忙看一下问题在哪里?
万分感谢!
#include<bits/stdc++.h>
#include<queue>
#define MAX 200000
using namespace std;
bool vis[MAX+5];
int dis[MAX+5];
struct Edge
{
int to,val;
};
vector<Edge> G[MAX + 5];
struct cmp
{
bool operator() (Edge x,Edge y)
{
return x.val>y.val;
}
};
priority_queue<Edge,vector<Edge>,cmp> q;
void dij(int s,int n)
{
for(int i=1;i<=n;i++)
{
vis[i]=false;
dis[i]=0xfffff;
}
dis[s]=0;
Edge now,nxt;
now.to=s;
now.val=0;
q.push(now);
while(!q.empty())
{
now=q.top();
q.pop();
if(vis[now.to])
continue;
vis[now.to]=true;
for(int i=0;i<G[now.to].size();i++)
{
nxt=G[now.to][i];
if(now.val+nxt.val<dis[nxt.to])
{
dis[nxt.to]=now.val+nxt.val;
nxt.val=dis[nxt.to];
q.push(nxt);
}
}
}
}
int main()
{
int n, m ,s;
cin>>n>>m>>s;
Edge now;
int u;
while(m--)
{
cin >> u >> now.to >> now.val;
G[u].push_back(now);
}
dij(s, n);
for(int i=1;i<=n;i++)
cout <<dis[i]<<' ';
return 0;
}