WHY RE
查看原帖
WHY RE
759120
luogu_MeiFengqi楼主2024/7/16 18:14
#include<bits/stdc++.h>
using namespace std;
#define int long long
int ans;
int n,m;
int input[510];
int he[510];
int fa[510];
struct node{
	int x,y,z;
}a[510];
inline bool cmp(node p,node q)
{
	return p.z>q.z;
}
inline int find(int a)
{
	if(a==fa[a]) return a;
	return fa[a]=find(fa[a]);
}
inline void join(int a,int b)
{
	a=find(a);
	b=find(b);
	if(a==b) return;
	else{
		if(he[a]==he[b]) he[b]++;
		fa[a]=b;
	}
	return;
}
inline int ksm(int a,int b)
{
	int s=1;
	while(b>0){
		if(b&1) s*=a,s%=m;
		a*=a,a%=m;
		b>>=1;
	}
	return s;
}
signed main(){
	cin >> n >> m;
	for(int i=1;i<=n;i++)
	{
		cin >> input[i];
		fa[i]=i;
		he[i]=0;
	}
	sort(input+1,input+n+1);
	int cnt=0;
	for(int i=1;i<=n;i++) 
	for(int j=i+1;j<=n;j++)
	{
		if(i!=j)
		{
			a[++cnt].x=i;
			a[cnt].y=j;
			a[cnt].z=(ksm(input[i],input[j])%m+ksm(input[j],input[i]))%m;
		}
	}
	sort(a+1,a+cnt+1,cmp);
//	for(int i=1;i<=cnt;i++)
//	{
//		cout << a[i].x << " " << a[i].y << " " << a[i].z << endl;
//	}
	int fj=0;
	for(int i=1;i<=cnt;i++)
	{
		if(find(a[i].x)!=find(a[i].y))
		{
			join(a[i].x,a[i].y);
			ans+=a[i].z;
			fj++;
		}
		if(fj==n-1)
		{
			cout << ans << endl;
			return 0;
		}
	}
	return 0;
}

萌新RE 求改(不知是哪里越界了)

2024/7/16 18:14
加载中...