1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4
5 const int MAXN=100010;
6
7 struct Blanket
8 {
9 int area1,area2;
10 int beauty;
11 }b[MAXN];
12 inline bool cmp(Blanket a,Blanket b) {return a.beauty>b.beauty;}
13
14 int head[MAXN];
15 int root(int x)
16 {
17 if (head[x]==x) return x;
18 return head[x]=root(head[x]);
19 }
20
21 int main()
22 {
23 int n,m,k;
24 cin>>n>>m>>k;
25
26 int cnt=0;
27 for (int i=1;i<=m;i++)
28 {
29 cnt++;
30 cin>>b[cnt].area1>>b[cnt].area2>>b[cnt].beauty;
31 }
32 sort(b+1,b+cnt+1,cmp);
33
34 for (int i=1;i<=n;i++) head[i]=i;
35 int t=0,ans=0;
36 for (int i=1;i<=m;i++)
37 {
38 if (head[root(b[i].area1)]!=root(b[i].area2))
39 {
40 head[root(b[i].area1)]=root(b[i].area2);
41 ans+=b[i].beauty;
42 t++;
43 if (t==k) break;
44 }
45 }
46 cout<<ans<<endl;
47
48 return 0;
49 }