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}); } } } }