/* 建 图 int u, v, w;*/
memset(e,0x3f,sizeof(e)); For(i,1,N) e[i][i] = 0; while(M--)
{
scanf("%d%d%d",&u,&v,&w); if(e[u][v] > w) e[u][v] = e[v][u] = w;
}
前向星建图

开辟空间
int first[顶点数], tot, N;

struct Edge
{
    int v, w, next;
} e[边数];	//双向边,记得开两倍

建图
void add(int u, int v, int w)
{
    e[tot].v = v;
    e[tot].w = w;
    e[tot].next = first[u];
    first[u] = tot++;
}

int main()
{
    tot = 0;
    memset(first,-1,sizeof(first));
    while(M--) //M 条边
    {
        scanf("%d%d%d",&u,&v,&w);
        add(u,v,w);	//双向图 再反着加一条
    }
}