Submission #224089

#TimeUsernameProblemLanguageResultExecution timeMemory
224089oolimryOlympic Bus (JOI20_ho_t4)C++14
0 / 100
78 ms3296 KiB
#include <bits/stdc++.h> using namespace std; long long inf = (1LL << 56LL); typedef pair<long long, long long> ii; vector<ii> adj[205]; long long dis[205]; int n, m; long long dij(int s, int t){ fill(dis, dis + (n+1), inf); priority_queue<ii, vector<ii>, greater<ii> > dtr; /// use greater<int> dtr.push(ii(0,s)); dis[s] = 0; ///first is minpath, second is vertex while(!dtr.empty()){ ii cur = dtr.top(); dtr.pop(); for(int j = 0;j < (int) adj[cur.second].size();j++){ ii nei = adj[cur.second][j]; if(nei.first + cur.first < dis[nei.second]){ dis[nei.second] = nei.first + cur.first; dtr.push(ii(dis[nei.second],nei.second)); } } } return dis[t]; } struct edge{ long long u, v, c, d; }; vector<edge> edges; void subtask1(){ long long ans = dij(1, n)+ dij(n, 1); for(int i = 0;i < m;i++){ for(int i = 1;i <= n;i++) adj[i].clear(); long long res = 0; for(int j = 0;j < m;j++){ edge e = edges[j]; if(i == j){ adj[e.v].push_back(ii(e.c,e.v)); res += e.d; } else adj[e.u].push_back(ii(e.c,e.v)); } ans = min(ans, dij(1,n) + dij(n,1) + res); } if(ans >= inf) ans = -1; cout << ans; exit(0); } int main(){ //freopen("i.txt","r",stdin); ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i = 0;i < m;i++){ long long u, v, c, d; cin >> u >> v >> c >> d; edges.push_back({u,v,c,d}); adj[u].push_back(ii(c,v)); } if(m <= 1000) subtask1(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...