1 Star 0 Fork 1

saigon/Algorithms

forked from charlieshu/Algorithms 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
P2323 [HNOI2006] ╣л┬╖╨▐╜и╬╩╠т.cpp 1.37 KB
一键复制 编辑 原始数据 按行查看 历史
charlie 提交于 2024-01-09 00:01 . move from github to gitee
#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;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/saigonshu/algorithm.git
git@gitee.com:saigonshu/algorithm.git
saigonshu
algorithm
Algorithms
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385