不是说任意一种方案吗?
#include<bits/stdc++.h>
using namespace std;
int n,k,m,fa[10001],ii,ans;
struct node
{
int u,v,w1,w2,ij;
}e[20002];
struct node2
{
int u,v;
}i1[20002];
bool cmp1(node x,node y)
{
return x.w1<y.w1;
}
int find(int l)
{
if(fa[l]==l)
{
return l;
}
else
{
fa[l]=find(fa[l]);
return fa[l];
}
}
void kls1()
{
for(int i=1;i<m&&k!=0;i++)
{
if(find(e[i].u)!=find(e[i].v))
{
fa[fa[e[i].u]]=fa[e[i].v];
i1[++ii].u=e[i].ij;
i1[ii].v=1;
ans=max(ans,e[i].w1);
k--;
}
}
}
bool cmp2(node x,node y)
{
return x.w2<y.w2;
}
void kls2()
{
for(int i=1;i<m;i++)
{
if(find(e[i].u)!=find(e[i].v))
{
fa[fa[e[i].u]]=fa[e[i].v];
i1[++ii].u=e[i].ij;
i1[ii].v=2;
}
}
}
bool cmp3(node2 x,node2 y)
{
return x.u<y.u;
}
int main()
{
cin>>n>>k>>m;
for(int i=1;i<=n;i++)
{
fa[i]=i;
}
for(int i=1;i<m;i++)
{
int x,y,z1,z2;
cin>>x>>y>>z1>>z2;
e[i].u=x;
e[i].v=y;
e[i].w1=z1;
e[i].w2=z2;
e[i].ij=i;
}
sort(e+1,e+m,cmp1);
kls1();
sort(e+1,e+m,cmp2);
kls2();
sort(i1+1,i1+ii,cmp3);
cout<<ans<<endl;
for(int i=1;i<=ii;i++)
{
cout<<i1[i].u<<" "<<i1[i].v<<endl;
}
return 0;
}