弱化版随机数据有些可以过
把最大值改小去掉负数还是没用
问题出在哪??
代码:
#include<cstdio>
#include<queue>
#include<vector>
#define MAXN 100001
#define LL_MAX 100000000000000ll
using std::pair;
using std::priority_queue;
using std::vector;
struct comp {
inline bool operator () (long long *a,long long *b) {return *a>*b;};
};
int n,m,s;
long long dis[MAXN];
priority_queue<long long*,vector<long long*>,comp> q;
vector<pair<int,int> > edge[MAXN];
int main() {
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=m;i++) {
int a,b,c; scanf("%d%d%d",&a,&b,&c);
edge[a].push_back(pair<int,int>(b,c));
}
for(int i=1;i<=n;i++) {
dis[i]=(i==s?0ll:LL_MAX);
q.push(&dis[i]);
}
while(!q.empty()) {
int pos=q.top()-dis; long long cur=*q.top();
q.pop();
for(vector<pair<int,int> >::iterator i=edge[pos].begin();i!=edge[pos].end();i++)
if(cur+i->second<dis[i->first]) dis[i->first]=cur+i->second;
}
for(int i=1;i<=n;i++) printf("%lld ",dis[i]);
puts("");
return 0;
}