1 条题解
-
0
这道题题目也都写了就是模版题。可以使用Kruskal:
#include<bits/stdc++.h> #define ll long long #define cst const int #define rt return #define cn scanf #define ct printf using namespace std; cst N=5005; cst M=200005; struct node{ int a,b,w; }bian[M]; int n,m,fa[N],total,bt; bool cmp(node B1,node B2); void csh(); int find(int number); void cl(int number_1,int number_2); int main(){ cn("%d %d",&n,&m); if(n==1){ ct("0"); rt 0; } for(int i=1;i<=m;i++) cn("%d %d %d",&bian[i].a,&bian[i].b,&bian[i].w); sort(bian+1,bian+m+1,cmp); csh(); for(int i=1;i<=m;i++){ if(find(bian[i].a)!=find(bian[i].b)){ cl(bian[i].a,bian[i].b); total+=bian[i].w,bt++; if(bt==n-1){ ct("%d",total); return 0; } } } ct("orz"); return 0; } bool cmp(node b1,node b2){ rt b1.w<b2.w; } void csh(){ for(int i=1;i<=n;i++) fa[i]=i; } int find(int num){ if(fa[num]==num) rt num; rt fa[num]=find(fa[num]); } void cl(int nm1,int nm2){ fa[find(nm1)]=find(nm2); }
- 1
信息
- ID
- 2302
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 80
- 已通过
- 13
- 上传者