emmmmmmm
把你错误代码附上
我对照一下哪里有问题
#include<bits/stdc++.h>
using namespace std;
int n,m,w,v,u,total;
struct eage
{
int v,w;
};
vector <eage> G[5001];
void prim()
{
vector <int> dis(n+1,INT32_MAX);
vector <int> vist(n+1,0);
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<>>pq;
pq.push({0,1});
dis[1] = 0;
while(!pq.empty())
{
int w=pq.top().first;
int u=pq.top().second;
pq.pop();
if(vist[u])
{
continue;
}
ans += w;
total++;
vist[u]=1;
for(auto [v,w]:G[u])
{
if(vist[v]==0&&w<dis[v])
{
dis[v]=w;
pq.push({w,v});
}
}
}
}
int main()
{
cin >> n >> m;
memset(a,-1,sizeof(a));
for(int i = 0;i < m;i++)
{
int u,v,l;
cin >> u >> v >> l;
G[w].push_back(v,l);
G[v].push_back(w,l);
}
prim();
cout << total;
return 0;
}
1.定义ans
2.删掉memset(a,-1,sizeof(a));
3.
for(int i = 0;i < m;i++)
{
int u,v,l;
cin >> u >> v >> l;
G[w].push_back(v,l);
G[v].push_back(w,l);
}
改成
for(int i = 0;i < m;i++)
{
int u,v,l;
cin >> u >> v >> l;
G[u].push_back({v,l});
G[v].push_back({u,l});
}
4.输出ans
不是total