感觉很对啊,为啥能wa20个点??
查看原帖
感觉很对啊,为啥能wa20个点??
1122530
elpsconr楼主2024/8/10 01:38

感觉我写的没问题啊,为啥会wa??ps(感觉是某lanqiao22年国赛原题)

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc rt<<1
#define rc rt<<1|1
const int N=3e5+6,yyx=4e9+7;
int n,m,d[N],a[N],st[N];
vector<PII> to[N];
void dijkstra(int x){
    priority_queue<PII,vector<PII>,greater<PII> > q;
    d[x]=0;q.push({0,x});
    while(q.size()){
        auto now=q.top().second;q.pop();
        if(st[now]) continue;
        st[now]=1;
        for(auto c:to[now]){
            int j=c.first,w=c.second;
            if(d[j]>d[now]+w+a[now]){
                d[j]=d[now]+w+a[now];
                if(!st[j]) q.push({d[j],j});
            }
        }
    }
}
inline void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;++i) cin>>a[i],d[i]=yyx;
    for(int i=1;i<=m;++i){
        int u,v,w;cin>>u>>v>>w;
        to[u].push_back({v,w});
        to[v].push_back({u,w});
    }
    dijkstra(1);
    for(int i=2;i<=n;++i) cout<<d[i]+a[i]<<" \n"[i==n];
}
signed main(){
    cin.tie(0)->sync_with_stdio(0);
    int _=1;
   //cin>>_;
    while(_--)
    solve();
    return 0;
}
2024/8/10 01:38
加载中...