哪位大神帮本蒟蒻改改代码?
查看原帖
哪位大神帮本蒟蒻改改代码?
950927
_luo_gu楼主2024/8/20 11:00
#include <bits/stdc++.h>
#define int long long
using namespace std ;
struct Edge{
	int u , v , w ;
}edge[250005];
bool cmp ( Edge a, Edge b ){
	return a.w > b.w ;
} 
int n , m , fa[502] , cnt , ct , ans , a[502] ;
int find_root( int x ){
	if( fa[x] == x ){
		return x ;
	}
	return fa[x] = find_root(fa[x]);
}
void make_together( int x , int y ){
	fa[find_root( x )] = find_root(y);
	return ;
}
signed main(){
	scanf("%lld%lld" , &n , &m );
	for( int i = 1 ; i <= n ; i++ ){
		scanf("%lld" , &a[i] );
		fa[i]= i ;
	} 
	cnt = 0 ;
	ans = 0 ;
	ct = n ;
	for( int i = 1; i <= n ; i++ ){
		for( int j = i +1; j <= n; j ++){
			edge[++cnt].u = i ;
			edge[cnt].v = j ;
			int x , y ;
			x = powl( a[i] , a[j] );
			y = powl( a[j] , a[i] );
			edge[cnt].w = ( x + y ) % m ;
		}
	}
	sort( edge+1,edge+cnt+1 , cmp );
	for( int i = 1 ; i <= cnt ; i ++ ){
		if( find_root( edge[i].u ) != find_root( edge[i].v )){
			ct -- ;
			ans += edge[i].w ;
			make_together( edge[i].u , edge[i].v );			
		}
		if( ct == 1 ){
			cout << ans << endl;
			return 0 ;
		}
	}
}
2024/8/20 11:00
加载中...