14 条题解
-
-1
解决问题, 注意开 ,不然会爆
下面是 代码:
#include<bits/stdc++.h> using namespace std; inline int read() { int x=0; bool flag=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') flag=0; c=getchar(); } while(c>='0'&&c<='9') { x=(x<<1)+(x<<3)+c-'0'; c=getchar(); } return (flag?x:~(x-1)); } int n,m,k; long long ans=0; int f[100001]; struct edge { int x,y,z; }a[200001]; inline void init() { for(int i=1;i<=n;i++) { f[i]=i; } } inline int find(int x) { return x==f[x]?x:f[x]=find(f[x]); } inline bool cmp(edge a,edge b) { return a.z<b.z; } int main() { n=read();m=read(); init(); for(int i=1;i<=m;i++) { int x,y,z; a[i].x=read();a[i].y=read();a[i].z=read(); } sort(a+1,a+m+1,cmp); for(int i=1;i<=m;i++) { int fx=find(a[i].x),fy=find(a[i].y); if(fx==fy) { continue; } f[fx]=fy; ans+=a[i].z; } cout<<ans; return 0; }
完结撒花!
信息
- ID
- 91
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 883
- 已通过
- 293
- 上传者