社区讨论
样例过了但是一分没有
P2573[SCOI2012] 滑雪参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo8l2dv7
- 此快照首次捕获于
- 2023/10/27 20:22 2 年前
- 此快照最后确认于
- 2023/10/27 20:22 2 年前
求助
CPP#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#define int long long
#define MAXN 1000300
using namespace std;
int n,m,ans;
int h[MAXN];
int fa[MAXN];
struct node{
int v;
int w;
}e;
struct edge{
int u;
int v;
int w;
}Edge[MAXN];
vector<node> G[MAXN];
bool cmp(edge x,edge y){
if(x.u==y.u)
return x.w<y.w;
return x.u>y.u;
}
int find(int x){
if(fa[x]==x){
return x;
}else{
return fa[x]=find(fa[x]);
}
}
int cnt=0;
void kruskal() {
for(int i=1; i<=n; i++) {
fa[i]=i;
}
sort(Edge,Edge+m,cmp);
for(int i=0; i<m; i++) {
int eu=find(Edge[i].u), ev=find(Edge[i].v);
if(eu==ev) {
continue;
}
ans+=Edge[i].w;
cnt++;
fa[ev]=eu;
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>h[i];
}
for(int i=1;i<=m;i++){
cin>>Edge[i].u>>Edge[i].v>>Edge[i].w;
if(h[Edge[i].v]>h[Edge[i].u]){
swap(Edge[i].u,Edge[i].v);
}
e.v=Edge[i].v;
e.w=Edge[i].w;
G[Edge[i].u].push_back(e);
}
kruskal();
cout<<cnt+1<<' '<<ans<<endl;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...