我也不知道怎么水到86的
#include <bits/stdc++.h>
using namespace std;
struct tt{
int a=0,b=0,v=0;
};
bool cmp(tt a,tt b){
return a.v>b.v;
}
int father[100005];
int find(int a){
return (father[a]==a) ? a : father[a]=find(father[a]);
}
int main(){
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
int n, k, m;
cin >> n >> k >> m;
tt sn[k];
for(int i=0;i<k;i++){
father[i]=i;
cin>>sn[i].a>>sn[i].b>>sn[i].v;
sn[i].v = !sn[i].v;
//cout << sn[i].v << endl;
}
for(int i=k;i<n;i++){
father[i] = i;
}
sort(sn, sn + k, cmp);
int a, i, sum = 0;
vector<int> ans;
for(i=0,a=0;a<n-1,i<k;i++){
//cout << sum << " " << m << " " << (sum >= m) << endl;
if(sum>=m && sn[i].v==1){
continue;
}
int va = find(sn[i].a), vb = find(sn[i].b);
if(va != vb){
father[vb] = va;
sum+=sn[i].v;
ans.push_back(i);
a++;
}
}
if(sum<m){
cout << "no solution";
return 0;
}
if(a<n-1){
cout << "no solution";
return 0;
}
for (int i = 0; i < ans.size();i++){
cout << sn[ans[i]].a << " " << sn[ans[i]].b << " " << !sn[ans[i]].v << endl;
}
return 0;
}