#include <iostream>
#include <queue>
#define MAXN 101
using namespace std;
struct type1 {
int v, w;
bool operator < (const type1& node) const {
return w > node.w;
}
};
int MAP[MAXN][MAXN];
int D[MAXN];
/**********************************/
int dijk(int s, int t, int n)
{
priority_queue<type1> q;
bool mk[MAXN] = {false};
type1 e = {s, 0}, ne;
int i, tmp;
D[s] = 0;
q.push(e);
while (!q.empty())
{
e = q.top();
q.pop();
if (mk[e.v]) continue;
if (e.v == t) return D[t];
for (mk[e.v] = true, i = 1; i <=n; i++)
if (!mk[i] && MAP[e.v][i] < INT_MAX && (tmp = e.w + MAP[e.v][i]) < D[i])
{
D[ne.v = i] = ne.w = tmp;
q.push(ne);
}
}
return D[t];
}
/*****************************************/
int main()
{

for (i = 1; i <= n; i++)
for (D[i] = INT_MAX, j = 1; j <= n; j++)
MAP[i][j] = INT_MAX;

}
#include <queue>
#define MAXN 101
using namespace std;
struct type1 {
int v, w;
bool operator < (const type1& node) const {
return w > node.w;
}
};
int MAP[MAXN][MAXN];
int D[MAXN];
/**********************************/
int dijk(int s, int t, int n)
{
priority_queue<type1> q;
bool mk[MAXN] = {false};
type1 e = {s, 0}, ne;
int i, tmp;
D[s] = 0;
q.push(e);
while (!q.empty())
{
e = q.top();
q.pop();
if (mk[e.v]) continue;
if (e.v == t) return D[t];
for (mk[e.v] = true, i = 1; i <=n; i++)
if (!mk[i] && MAP[e.v][i] < INT_MAX && (tmp = e.w + MAP[e.v][i]) < D[i])
{
D[ne.v = i] = ne.w = tmp;
q.push(ne);
}
}
return D[t];
}
/*****************************************/
int main()
{

for (i = 1; i <= n; i++)
for (D[i] = INT_MAX, j = 1; j <= n; j++)
MAP[i][j] = INT_MAX;

}