제출 #1344619

#제출 시각아이디문제언어결과실행 시간메모리
1344619cansu_mutluOlympic Bus (JOI20_ho_t4)C++20
11 / 100
13 ms4320 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
int n,m;
const int inf = 1e18,mxn = 2e3+5;
int u[mxn*100],v[mxn*100],w[mxn*100],c[mxn*100],ok[mxn*100],anne[mxn];
int d[mxn][mxn];
vector<int> a[mxn];
void bul(int i)
{
    vector<int> dist(n+1,inf);
    dist[i] = 0;
    for(int i=1;i<=n;i++) anne[i] = -1;
    priority_queue<array<int,2>> pq;
    pq.push({0,1});
    while(pq.size())
    {
        int s = pq.top()[1];
        pq.pop();
        for(int x:a[s])
        {
            if(dist[v[x]]>dist[s]+w[x])
            {
                anne[v[x]] = x;
                dist[v[x]] = dist[s]+w[x];
                pq.push({-dist[v[x]],v[x]});
            }
        }
    }
    for(int i=1;i<=n;i++) 
    {
        if(anne[i]!=-1)
        {
            ok[anne[i]] = 1;
        }
    }
}
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> m;
    for(int i=1;i<=n;i++)
    {
        anne[i] = -1;
        for(int j = 1;j<=n;j++)
        {
            d[i][j]=inf;
        }
        d[i][i] = 0;
    }
    for(int i=0;i<m;i++)
    {
        ok[i] = 0;
        cin >> u[i]>> v[i]>> w[i]>> c[i];
        d[u[i]][v[i]] = min(d[u[i]][v[i]],w[i]);
        a[u[i]].push_back(i);
    }
    for(int k = 0;k<n;k++)
    {
        for(int u = 0;u<n;u++)
        {
            for(int v = 0;v<n;v++)
            {
                u++;
                v++;
                k++;
                d[u][v] = min(d[u][v],d[u][k]+d[k][v]);
                u--;
                v--;
                k--;
            }
        }
    }
 // bul(1);
  // bul(n);
    int b = d[1][n],s  = d[n][1];
    int ans = b+s;
   /// cout << ans << endl;
    for(int i=0;i<m;i++)
    {
        if(ok[i]) continue;
        int mn = min(b,d[1][v[i]]+w[i]+d[u[i]][n]);
        int sn = min(s,d[n][v[i]]+w[i]+d[u[i]][1]);
        ans = min(ans,mn+sn+c[i]);
    }
    if(ans>=inf) ans = -1;
    cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...