打了个模板,写挂了
// std Prim code.
#include <bits/stdc++.h>
using namespace std;
vector<int> Edge[100005];
priority_queue<pair<int,int> >q;
int dis[100005],n,m;
bool vis[100005];
void Prim(int start)
{
for(int i=1;i<=n;i++) dis[i]=1e9;
dis[start]=0; int mindis=0;
q.push(make_pair(start,0));
while(!q.empty())
{
int fir=q.top().first,sec=q.top().second;
mindis+=dis[fir]; vis[fir]=1;
for(int i=0;i<Edge[fir].size();i++)
{
int to=Edge[fir][i];
if(vis[to]) continue;
dis[to]=min(dis[to],Edge[fir][i]+dis[fir]);
q.push(make_pair(to,-dis[to]));
}
q.pop();
}
cout<<mindis;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
Edge[x].push_back(y);
Edge[y].push_back(x);
}
Prim(1);
return 0;
}