代码拉取完成,页面将自动刷新
同步操作将从 charlieshu/Algorithms 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <iostream>
#include <algorithm>
using namespace std;
struct edge{
int start,stop,len,index;
};
bool cmp(edge a,edge b){
return a.len<b.len;
}
bool cmp2(edge a,edge b){
return a.index<b.index;
}
int find(int x,int f[]){
if(f[x] == x)
return x;
return f[x]=find(f[x],f);
}
int main(){
int ansn=0;
int n,k,m;
cin>>n>>k>>m;
m--;
edge e1[m],e2[m];
edge ea[n-1];
int index=0;
for(int i=0;i<m;i++){
int a,b,c1,c2;
cin>>a>>b>>c1>>c2;
a--;
b--;
e1[i] = {a,b,c1,i};
e2[i] = {a,b,c2,i};
}
sort(e1,e1+m,cmp);
sort(e2,e2+m,cmp);
int f[n];
for(int i=0;i<n;i++)
f[i] = i;
int p=0;
for(int i=0;i<k;i++){
while(find(e1[p].start,f) == find(e1[p].stop,f)) p++;
f[find(e1[p].start,f)] = find(e1[p].stop,f);
ansn = ansn>e1[p].len?ansn:e1[p].len;
ea[index].len = 1;
ea[index].index = e1[p].index;
index++;
}
// for(int i=0;i<n;i++)
// cout<<f[i]<<" ";
// cout<<endl;
p = 0;
while(index <= n-2){
while(find(e2[p].start,f) == find(e2[p].stop,f)) p++;
// cout<<p<<endl;
f[find(e2[p].start,f)] = find(e2[p].stop,f);
ansn = ansn>e2[p].len?ansn:e2[p].len;
ea[index].len = 2;
ea[index].index = e2[p].index;
index++;
}
sort(ea,ea+n-1,cmp2);
cout<<ansn<<endl;
for(int i=0;i<n-1;i++){
cout<<ea[i].index+1<<" "<<ea[i].len<<endl;
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。