#36897: c++答案


samlin961112@gmail.com (林哲甫)

學校 : 新北市私立南山高級中學
編號 : 220506
來源 : [219.70.213.92]
最後登入時間 :
2024-04-28 22:43:43
f678. FJCU_109_Winter_Day3_Lab2 最小生成樹練習 | From: [219.70.213.92] | 發表日期 : 2023-08-15 20:54

目前才剛學最小生成樹,發現這題好像不需要有特殊的merge,以下是答案

#include <bits/stdc++.h>
using namespace std;
struct q{
  int a,b,c;
};
int per[100000];
int find(int a){
  if(per[a]==a){
    return a;
  }
  return find(per[a]);
}
bool cmp(q a,q b){
  return a.c<b.c;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n,m;
  cin>>n>>m;
  for(int i=0;i<n;i++){
    per[i]=i;
  }
  vector<q> road(m);
  for(int i=0;i<m;i++){
    cin>>road[i].a>>road[i].b>>road[i].c;
  }
  sort(road.begin(),road.end(),cmp);
  int ans=0;
  int a,b,c;
  for(int i=0;i<m;i++){
    a=road[i].a;b=road[i].b;c=road[i].c;
    a=find(a);
    b=find(b);
    if(a!=b){
      per[a]=b;
      ans+=c;
    }
  }
  cout<<ans;
}
 
ZeroJudge Forum