社区讨论
WA10pts求条,必关
P2323[HNOI2006] 公路修建问题参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi4jdsoi
- 此快照首次捕获于
- 2025/11/18 20:15 4 个月前
- 此快照最后确认于
- 2025/11/20 04:04 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int N=30005;
bool used[N<<1];
int fa[N];
inline int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
struct Ans{
int id,flag;
bool operator<(const Ans& o)const{
return id<o.id;
}
}ans[N];
int tot;
struct Tree{
struct node{
int u,v,w,id;
bool operator<(const node& o)const{
return w<o.w;
}
}e[N<<1],g[N<<1];
int cnt;
inline void add(int u,int v,int w,int i){
g[++cnt]={u,v,w,i};
}
inline int krul(int cnt,int sum,int flag){
int res=0,anss=0;
sort(g+1,g+cnt+1);
for(int i=1;i<=cnt&&res<sum;i++){
int u=find(g[i].u),v=find(g[i].v);
if(u==v) continue;
anss=max(anss,g[i].w);
fa[v]=u;
ans[++tot]={g[i].id,flag};
res++;
}
return anss;
}
}T1,T2;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<m;i++){
int u,v,w1,w2;
cin>>u>>v>>w1>>w2;
T1.add(u,v,w1,i);
T2.add(u,v,w2,i);
}
cout<<max(T1.krul(T1.cnt,k,1),T2.krul(T2.cnt,n-1-k,2))<<"\n";
sort(ans+1,ans+tot+1);
for(int i=1;i<=tot;i++) cout<<ans[i].id<<" "<<ans[i].flag<<"\n";
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...