Submission #1193169

#TimeUsernameProblemLanguageResultExecution timeMemory
1193169meisgoodOlympic Bus (JOI20_ho_t4)C++20
0 / 100
1095 ms10960 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int cost[100003] ; int aa[100003],bb[100003],dd[100003] ; set <int> adj[203] ; set <int> adj2[203] ; int used[100003] ; int n,m ; bool ok=0 ; void con(int xx){ priority_queue <pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q ; vector <int> vis(203,0) ; vector <int> dist(203,LLONG_MAX/4) ; q.push({0,xx}) ; dist[xx]=0 ; while (!q.empty()){ auto [d,x]=q.top() ; q.pop() ; if (vis[x]) continue ; vis[x]=1 ; for (auto id : adj[x]){ if (dist[bb[id]]>d+dd[id]){ q.push({d+dd[id],bb[id]}) ; dist[bb[id]]=d+dd[id] ; used[id]=1 ; if (id-m>=0) used[id-m]=1 ; } } } if (vis[n]) ok=1 ; } int dij(int xx){ priority_queue <pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q ; vector <int> vis(203,0) ; vector <int> dist(203,LLONG_MAX/4) ; q.push({0,xx}) ; dist[xx]=0 ; while (!q.empty()){ auto [d,x]=q.top() ; // cout << x << endl ; q.pop() ; if (vis[x]) continue ; vis[x]=1 ; for (auto id : adj[x]){ if (dist[bb[id]]>d+dd[id]){ q.push({d+dd[id],bb[id]}) ; dist[bb[id]]=d+dd[id] ; } } } // cout << xx << endl ; cout << endl ; if (xx==1) return dist[n] ; else return dist[1] ; } signed main() { int i,j ; cin >> n >> m ; for (i = 0 ; i < m ; i ++){ cin >> aa[i] >> bb[i] >> dd[i] >> cost[i] ; adj[aa[i]].insert(i) ; aa[i+m]=bb[i],bb[i+m]=aa[i],dd[i+m]=dd[i],cost[i+m]=cost[i] ; adj2[aa[i]].insert(i) ; adj2[bb[i]].insert(i+m) ; } con(1) ; int tt=0 ; tt+=dij(1) ; tt+=dij(n) ; int mn=tt ; for (i = 0 ; i < m ; i ++){ if (!ok||used[i]){ // cout << i ; int tt=0 ; adj[aa[i]].erase(i) ; swap(aa[i],bb[i]) ; adj[aa[i]].insert(i) ; tt+=dij(1) ; tt+=dij(n) ; // cout << i << " " << tt << endl ; adj[aa[i]].erase(i) ; swap(aa[i],bb[i]) ; adj[aa[i]].insert(i) ; mn=min(mn,tt+cost[i]) ; } else { mn=min(mn,tt+cost[i]) ; } } if (mn>=LLONG_MAX/4){ cout << -1 << endl ; return 0 ; } cout << mn << endl ; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...