#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define pii pair<int, int>
#define pb push_back
#define mp make_pair
using namespace std;
struct indij
{
int dest, w, e;
};
struct nsort
{
bool operator()(const indij &a, const indij &b)
{
if(a.w==b.w) return a.dest>b.dest;
return a.w>b.w;
}
};
struct desc
{
bool operator()(const int &a, const int &b)
{
return a>b;
}
};
priority_queue<indij, vector<indij>, nsort> pq;
int n, m, ptr[100005], visited[100005], rd[100005], edge[300005], d[100005];
vector< pii > radj[100005];
vector<int> wts[100005];
void dijkstra(int node)
{
//cout << node << endl;
visited[node]=1;
for(int i = 0; i < radj[node].size(); i++)
{
int child=radj[node][i].first;
int ej=radj[node][i].second;
if(edge[ej]==-1)
{
indij nxt;
nxt.dest=child;
edge[ej]=wts[nxt.dest][ptr[nxt.dest]++];
nxt.w=rd[node]+edge[ej];
nxt.e=ej;
pq.push(nxt);
}
}
int nxt=-1;
while(pq.size()>0)
{
if(visited[pq.top().dest]==0)
{
nxt=pq.top().dest;
rd[nxt]=pq.top().w;
pq.pop();
break;
}
pq.pop();
}
if(nxt!=-1) dijkstra(nxt);
}
int main()
{
cin >> n >> m;
for(int i = 0; i < m; i++)
{
int u, v, w;
cin >> u >> v >> w;
radj[v].pb(mp(u, i));
wts[u].pb(w);
edge[i]=-1;
}
for(int i = 1; i <= n; i++)
{
sort(wts[i].begin(), wts[i].end(), desc());
}
rd[n]=0;
dijkstra(n);
cout << rd[1];
}
Compilation message
ferries.cpp: In function 'void dijkstra(int)':
ferries.cpp:38:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < radj[node].size(); i++)
^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
9440 KB |
Output is correct |
2 |
Correct |
3 ms |
9572 KB |
Output is correct |
3 |
Correct |
26 ms |
11344 KB |
Output is correct |
4 |
Correct |
343 ms |
28872 KB |
Output is correct |
5 |
Correct |
376 ms |
28868 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
9440 KB |
Output is correct |
2 |
Correct |
0 ms |
9572 KB |
Output is correct |
3 |
Correct |
29 ms |
11380 KB |
Output is correct |
4 |
Correct |
153 ms |
19136 KB |
Output is correct |
5 |
Correct |
256 ms |
25408 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
43 ms |
11112 KB |
Output is correct |
2 |
Correct |
46 ms |
11124 KB |
Output is correct |
3 |
Correct |
626 ms |
26416 KB |
Output is correct |
4 |
Correct |
719 ms |
26800 KB |
Output is correct |
5 |
Correct |
683 ms |
26800 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
619 ms |
26432 KB |
Output is correct |
2 |
Correct |
679 ms |
26428 KB |
Output is correct |
3 |
Correct |
759 ms |
28048 KB |
Output is correct |
4 |
Correct |
803 ms |
28056 KB |
Output is correct |
5 |
Correct |
686 ms |
28064 KB |
Output is correct |