#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int nx=2e2+5, mx=5e4+5;
ll n, m, u[mx], v[mx], dp[nx][nx], res=1e18, c[mx], d[mx], cst[nx], ced[nx], vs[nx], ord[nx], cnt, edg[nx][nx], f[mx];
vector<pair<ll, ll>> g[nx];
void dfs(int u, int x)
{
vs[u]=1;
for (auto [v, idx]:g[u]) if (!vs[v]&&v!=x) dfs(v, x);
}
void dfsst(int u)
{
vs[u]=1;
if (cst[u]) ord[u]=++cnt;
for (auto [v, idx]:g[u]) if (!vs[v]) dfsst(v);
}
void dfsed(int u)
{
vs[u]=1;
if (ced[u]) ord[u]=++cnt;
for (auto [v, idx]:g[u]) if (!vs[v]) dfsed(v);
}
void dfsc(int u, int st, int ed)
{
vs[u]=1;
for (auto [v, idx]:g[u]) if (!vs[v]&&!(u==st&&v==ed)) dfsc(v, st, ed);
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>m;
for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) if (i!=j) dp[i][j]=1e18;
for (int i=1; i<=m; i++) cin>>u[i]>>v[i]>>c[i]>>d[i], dp[u[i]][v[i]]=min(dp[u[i]][v[i]], c[i]), g[u[i]].push_back({v[i], i}),edg[u[i]][v[i]]++;
for (int k=1; k<=n; k++) for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) dp[i][j]=min(dp[i][j], dp[i][k]+dp[k][j]);
res=min(res, dp[1][n]+dp[n][1]);
cst[1]=ced[1]=cst[n]=ced[n]=1;
for (int i=2; i<n; i++)
{
for (int j=1; j<=n; j++) vs[j]=0;
dfs(1, i);
cst[i]=!vs[n];
}
cnt=0;
for (int i=1; i<=n; i++) vs[i]=0, ord[i]=-1;
dfsst(1);
for (int i=1; i<=m; i++)
{
if (cst[u[i]]&&cst[v[i]]&&ord[u[i]]+1==ord[v[i]]&&edg[u[i]][v[i]]==1)
{
for (int j=1; j<=n; j++) vs[j]=0;
dfsc(u[i], u[i], v[i]);
if (!vs[v[i]]) f[i]=1;
}
}
for (int i=2; i<n; i++)
{
for (int j=1; j<=n; j++) vs[j]=0;
dfs(n, i);
ced[i]=!vs[1];
}
cnt=0;
for (int i=1; i<=n; i++) vs[i]=0, ord[i]=-1;
dfsed(n);
for (int i=1; i<=m; i++)
{
if (ced[u[i]]&&ced[v[i]]&&ord[u[i]]+1==ord[v[i]]&&edg[u[i]][v[i]]==1)
{
for (int j=1; j<=n; j++) vs[j]=0;
dfsc(u[i], u[i], v[i]);
if (!vs[v[i]]) f[i]=1;
}
}
for (int i=1; i<=m; i++) if (!f[i]) res=min(res, d[i]+min(dp[1][n], dp[1][v[i]]+dp[u[i]][n]+c[i])+min(dp[n][1], dp[n][v[i]]+dp[u[i]][1]+c[i]));
if (res==1e18) cout<<-1;
else cout<<res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |