const int N=2e2+55;
const ll inf=0x3f3f3f3f3f3f3f;
struct Edge
{
int t;
ll v;
};
vector<Edge>g[N];
void add(int u,int v,ll w)
{
g[u].push_back({v,w});
g[v].push_back({u,w});
}
ll d[N];
bool vis[N];
priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > >que;
void djkstra()
{
memset(d,inf,sizeof d);
memset(vis,0,sizeof vis);
que.push({0,1});
d[1]=0;
while(!que.empty())
{
int now=que.top().second;
que.pop();
if(vis[now])continue;
vis[now]=true;
int len=g[now].size();
for(int i=0;i<len;i++)
{
Edge &e=g[now][i];
if(d[e.t]>d[now]+e.v)
{
d[e.t]=d[now]+e.v;
que.push({d[e.t],e.t});
}
}
}
}