이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
#define int long long
using ar2 = array<int,2>;
using ar3 = array<int,3>;
const int N = (int)2e5+10;
const int LINF = (int)2e18;
int n, m, dis[N];
vector<ar3> adj[N];
map<int,int> node[N];
int dijkstra(){
priority_queue<ar2,vector<ar2>,greater<ar2>> pq;
fill(dis,dis+n+1,LINF); dis[1]=0; pq.push({0,1});
while(sz(pq)){
auto [D,a] = pq.top(); pq.pop();
if(D!=dis[a]) continue;
for(auto [b,c,p] : adj[a]){
int w = min(p,node[a][c]-p);
if(dis[b]>dis[a]+w){
dis[b]=dis[a]+w;
pq.push({dis[b],b});
}
}
}
if(dis[n]==LINF) dis[n]=-1;
return dis[n];
}
int32_t main(){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> m;
for(int i = 1; i <= m; i++){
int a,b,c,d; cin >> a >> b >> c >> d;
adj[a].pb({b,c,d}); adj[b].pb({a,c,d});
node[a][c]+=d; node[b][c]+=d;
}
cout << dijkstra() << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |