社区讨论

How ABC E

学术版参与者 11已保存回复 16

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@lou3idjr
此快照首次捕获于
2023/11/11 21:41
2 年前
此快照最后确认于
2023/11/11 23:35
2 年前
查看原帖
不就是最小生成树板子吗?为啥我没过?
CPP
#include<iostream>
#include<algorithm>
using namespace std;
const int N=10;
const int M=100;
int n,m,cnt;
struct Edge{ 
	int from,to;
	long long value;
}edge[M];
int fa[N];
long long mod,ans;
int find(int x){ 
	return x==fa[x]?x:fa[x]=find(fa[x]);
} 
bool cmp(Edge x,Edge y){
	return x.value<y.value;
} 
void kruskal(){
	sort(edge+1,edge+m+1,cmp); 
	for(int i=1;i<=m;i++){
        int u=find(edge[i].from),v=find(edge[i].to);
        if(fa[u]==fa[v]){
            continue;
        }
        ans+=edge[i].value; ans%=mod;
        fa[v]=u; 
        if(++cnt==n-1){ 
            break;
        }
    }
} 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>mod;
	for(int i=1;i<=n;i++){  
		fa[i]=i;
	}
	for(int i=1;i<=m;i++){
		cin>>edge[i].from>>edge[i].to>>edge[i].value;
	} 
	kruskal();
	cout<<ans;
return 0;
}

回复

16 条回复,欢迎继续交流。

正在加载回复...