#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define int long long
struct node{
node(){}
node(int _a,int _b,int _id,int _c,int _d)
:a{_a},b{_b},id{_id},kind{_c},pri{_d} {}
int a,b,id,kind,pri;
bool operator <(const node other) const
{
return pri<other.pri;
}
};
struct Ans{
int a,b,id,k,p;
bool operator <(const Ans other) const
{
return id<other.id;
}
};
int n,k,m,ans;
int x,y,a,b;
vector<node>mp;
vector<Ans>vc;
int fa[10005];
bool bk[40005];
int find(int x)
{ return fa[x]==x?x:fa[x]=find(fa[x]); }
void Krus(int x)
{
int cnt=(x==1)?0:k;
for(int i=0;i<mp.size();i++)
{
if(find(mp[i].a)!=find(mp[i].b))
{
if(x==1)
{
if(mp[i].kind==1)
{
bk[i]=1,cnt++,
fa[find(mp[i].a)]=find(mp[i].b);
if(cnt==k) return;
}
}
else if(!bk[i])
{
bk[i]=1,cnt++,
fa[find(mp[i].a)]=find(mp[i].b);
if(cnt==n-1) return;
}
}
}
}
signed main()
{
cin>>n>>k>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<m;i++)
{
cin>>x>>y>>a>>b,
mp.push_back(node(x,y,i,1,a)),
mp.push_back(node(x,y,i,2,b));
}
sort(mp.begin(),mp.end());
Krus(1),Krus(0);
for(int i=1;i<=m*2;i++)
if(bk[i])
{
node v=mp[i];
vc.push_back({v.a,v.b,v.id,v.kind,v.pri});
}
sort(vc.begin(),vc.end());
for(auto i:vc)
ans=max(ans,i.p);
printf("%d\n",ans);
for(auto i:vc)
printf("%d %d\n",i.id,i.k);
return 0;
}
WA on #3, #4, #5, #6, #10 :<
这个没看懂:
Wrong Answer.wrong output format Unexpected end of file - int32 expected
啥意思