#define INF 0x3f3f3f
#define maxn 110
#define maxm 10010
using namespace std;
int dis[maxn];
int visit[maxn];
int head[maxn];
int n,top;
struct node
{
int to,val,next;
}edge[maxm];
void add(int a,int b,int c)
{
edge[top].to=b;
edge[top].val=c;
edge[top].next=head[a];
head[a]=top++;
}
void spfa(int start)
{
int i,j,next,u,v;
queue<int>q;
for(i=1;i<=n;++i)
dis[i]=INF;
dis[start]=0;
visit[start]=1;
q.push(start);
while(!q.empty())
{
u=q.front();
q.pop();
visit[u]=0;
for(i=head[u];i!=-1;i=edge[i].next)
{
v=edge[i].to;
if(dis[v]>dis[u]+edge[i].val)
{
dis[v]=dis[u]+edge[i].val;
if(!visit[v])
{
visit[v]=1;
q.push(v);
}
}
}
}
printf("%d\n",dis[n]);
}
#define pa pair<int,int>
struct node {
int to, next, v;
};
const int N = 2E6 + 10;
const int INF = 0x7fffffff
node edge[N];
int cnt, head[N], n, dis[N];
void add(int u,int v,int w) {
cnt++;
edge[cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt;
edge[cnt].v=w;
}
void dijkstra(int s) {
priority_queue<pa,vector<pa>,greater<pa> >q;
int i, now;
for (i = 1; i <= n; i++)
dis[i] = INF;
dis[s] = 0;
q.push(make_pair(0,s));
while (!q.empty()) {
now = q.top().second;
q.pop();
for (i = head[now]; i != -1; i = edge[i].next){
if (dis[now] + edge[i].v < dis[edge[i].to]) {
dis[edge[i].to] = dis[now] + edge[i].v;
q.push(make_pair(dis[edge[i].to], edge[i].to));
}
}
}
}
int main() {
memset(head, -1, sizeof(head));
cnt = 0;
}