dijkstra堆优化求调qwq 8 9 10寄了
查看原帖
dijkstra堆优化求调qwq 8 9 10寄了
1270328
wht59111570楼主2024/7/20 10:03
    #include<bits/stdc++.h>
    using namespace std;

    #define ll long long
    #define inf 0x3f3f3f3f
    #define N 1050
    #define M 200010
    ll n,m,x,a[N],b[N],c[N];
    struct edge
    {
        ll v,w;
    };
    bool vis[N];
    vector<edge> e[M];
    ll d[N];
    ll ans[N];
    void dijkstra(ll s) 
    {
        memset(d,inf,sizeof(d));
        priority_queue<pair<ll,ll>> q;
        d[s]=0;
        q.push({0,s});
        while(q.size())
        {
            auto t=q.top();
            q.pop();
            ll u=t.second;
            if(vis[u]) continue;
            vis[u]=1;
            for(auto ed:e[u])
            {
                ll v=ed.v,w=ed.w;
                if(d[v]>d[u]+w)
                {
                    d[v]=d[u]+w;
                    q.push({-d[v],v});
                }
            }
        }
    }

    int main()
    {
        cin>>n>>m>>x;
        for(ll i=1;i<=m;i++)
        {
            cin>>a[i]>>b[i]>>c[i];
            e[a[i]].push_back({b[i],c[i]});  
        }
        dijkstra(x);    
        for(ll i=1;i<=n;i++) ans[i]=d[i];
        memset(vis,0,sizeof(vis));
        memset(d,0,sizeof(d));
        memset(e,0,sizeof(e));
        for(ll i=1;i<=m;i++)
        {
            e[b[i]].push_back({a[i],c[i]});
        }
        dijkstra(x);
        ll anss=0;
        for(ll i=1;i<=n;i++)
        {
            anss=max(d[i]+ans[i],anss);
        }
        cout<<anss;
        return 0;
    }
2024/7/20 10:03
加载中...