Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <algorithm>#include <queue>#include <cstdio>#include <cstring>using namespace std;struct EDGE{int to,w;struct EDGE* next;}e[2000010];struct EDGE* p[100010]={0};int dis[100010],size=0;queue<int> h;bool is[100010]={false};void addedge(int a,int b,int c){e[size].to=b;e[size].w=c;e[size].next=p[a];p[a]=&e[size];size++;}void bfs(int s){dis[s]=0;is[s]=0;h.push(s);while(!h.empty()){int f=h.front();h.pop();is[f]=false;for(struct EDGE* u=p[f];u;u=u->next){int v=u->to,w=dis[f]+u->w;if(w<dis[v]){dis[v]=w;if(!is[v]) {h.push(v);is[v]=true;}