제출 #666977

#제출 시각아이디문제언어결과실행 시간메모리
666977Darren0724Robot (JOI21_ho_t4)C++17
0 / 100
421 ms48796 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() #define pii pair<int,int> #define mp make_pair const int INF=1e18; struct edge{ int to,c,p; edge(){} edge(int a,int b,int c1){ to=a,c=b,p=c1; } }; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n,m;cin>>n>>m; vector<vector<edge>> adj1(n); vector<vector<pair<int,int>>> adj(n); vector<map<int,int>> v(n); for(int i=0;i<m;i++){ int a,b,c,d;cin>>a>>b>>c>>d; a--;b--; adj1[a].push_back(edge(b,c,d)); adj1[b].push_back(edge(a,c,d)); v[a][c]++; v[b][c]++; } for(int i=0;i<n;i++){ for(edge &e:adj1[i]){ if(v[i][e.c]==1){ adj[i].push_back(mp(e.to,0)); } else{ adj[i].push_back({e.to,e.p}); } } } priority_queue<pii,vector<pii>,greater<pii>> pq; vector<bool> vis(n); vector<int> dis(n,INF); pq.push({0,0}); while(pq.size()){ int a,b; tie(a,b)=pq.top(); pq.pop(); if(vis[b]){ continue; } vis[b]=1; for(pair<int,int> p:adj[b]){ if(dis[p.first]>a+p.second){ dis[p.first]=a+p.second; pq.push({dis[p.first],p.first}); } } } if(dis[n-1]==INF){ cout<<-1<<endl; } else{ cout<<dis[n-1]<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...