社区讨论

样例过了但是一分没有

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 条回复,欢迎继续交流。

正在加载回复...