在A题的基础上,改变一下io,基本算法保持不变
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=50+5;
struct node{
int v;
int len;
node(int v,int len):v(v),len(len){};
friend bool operator <(node a,node b){
return a.len>b.len;
}
};
vector<node>G[maxn];
int vis[maxn];
int prime(int a)
{
priority_queue<node> pq;
memset(vis,0,sizeof(vis));
vis[a]=1;
int ans=0;
for(int i=0;i<G[a].size();i++)
pq.push(G[a][i]);
while(!pq.empty())
{
node st=pq.top();pq.pop();
if(vis[st.v]==0)
{
for(int i=0;i<G[st.v].size();i++)
pq.push(G[st.v][i]);
vis[st.v]=1;
ans+=st.len;
}
}
return ans;
}
void init()
{
for(int i=0;i<maxn;i++)
G[i].clear();
}
int main()
{
int t;
//freopen("B.txt","r",stdin);
while(scanf("%d",&t)!=EOF&&t)
{
int a,n,b,len;
scanf("%d",&n);
init();
while(n--)
{
scanf("%d%d%d",&a,&b,&len);
G[a].push_back(node(b,len));
G[b].push_back(node(a,len));
}
int ans=prime(1);
printf("%d\n",ans);
}
return 0;
}