只A了后3个点,rt。
#include <bits/stdc++.h>
using namespace std;
const int N=5005;
struct node
{
int v, w;
bool operator <(const node &A) const
{
return w<A.w;
};
};
vector<node> a[N];
priority_queue<node> q;
int n, m, u1, v1, w1, dis[N], vis[N], ans=0;
bool prim()
{
int cnt=0;
memset(dis, 63, sizeof dis);
memset(vis, 0, sizeof vis);
dis[1]=0;
q.push({1, 0});
while (!q.empty())
{
int u=q.top().v;
q.pop();
if (vis[u]) continue;
cnt++, ans+=dis[u], vis[u]=1;
for (int j=0; j<a[u].size(); j++)
{
int v=a[u][j].v, w=a[u][j].w;
if (!vis[v] && dis[v]>w) dis[v]=w, q.push({v, w});
}
}
if (cnt!=n) return 0;
return 1;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i=1; i<=m; i++)
{
scanf("%d%d%d", &u1, &v1, &w1);
a[u1].push_back({v1, w1});
a[v1].push_back({u1, w1});
}
if (prim()) printf("%d", ans);
else printf("orz");
return 0;
}