struct qnode{ int v,c; qnode(int v1=0,int c1=0):v(v1),c(c1){} bool operator < (const qnode &r) const { return c>r.c; } }; //最小生成树,堆 int mstfa(int n){ int i,j,ans=0,v,c; priority_queue<qnode> q; for(i=0;i<n;i++){ cost[i]=inf; visited[i]=false; } cost[0]=0; q.push(qnode(0,0)); for(i=0;i<n;i++){ v=q.top().v; while(visited[v]){ q.pop(); v=q.top().v; } c=q.top().c; q.pop(); visited[v]=true; for(j=head[v];j!=-1;j=e[j].nxt) if(!visited[e[j].y]&&e[j].c<cost[e[j].y]){ cost[e[j].y]=e[j].c; q.push(qnode(e[j].y,e[j].c)); } } for(i=0;i<n;i++) ans+=cost[i]; return ans; }