听取WA声一片
查看原帖
听取WA声一片
286238
TLE_Forever楼主2021/11/2 13:02

弱化版随机数据有些可以过

把最大值改小去掉负数还是没用

问题出在哪??

代码:

#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;
}

2021/11/2 13:02
加载中...