请教short和int效率问题,悬关
  • 板块学术版
  • 楼主sdyzpf
  • 当前回复15
  • 已保存回复15
  • 发布时间2024/7/6 08:35
  • 上次更新2024/7/6 10:52:01
查看原帖
请教short和int效率问题,悬关
174477
sdyzpf楼主2024/7/6 08:35
#include<bits/stdc++.h>
using namespace std;
int n,a[5005],fa[5005],vis[5005],siz[5005],x,y,h;
long long c;
long long ans=0,cnt;
basic_string<pair<int,int> > e[1000005];
inline int getf(int x){
	if(x==fa[x]) return x;
	return fa[x]=getf(fa[x]);
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=n;i++) siz[i]=1;
	cin>>x>>y>>h>>h;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){c=(c*x+y)%h;if(i<=j) e[c]+=pair<int,int>{i,j};}
	for(int i=0;i<=999999;i++){
		for(auto it=e[i].begin();it!=e[i].end();it++){
			int u=it->first;
			int v=it->second;
			if(u==v&&!vis[u]) ans+=i*(a[u]-1),vis[u]=1,cnt+=a[u]-1;
			else{
				int fau=getf(u);
				int fav=getf(v);
				if(fau!=fav){
					if(siz[fau]<siz[fav]) fa[fau]=fav,siz[fav]+=siz[fau];
					else fa[fav]=fau,siz[fau]+=siz[fav];
					if(vis[u]&&vis[v]) ans+=i,cnt++;
					else if(vis[u]) ans+=1ll*i*a[v],vis[v]=1,cnt+=a[v];
					else if(vis[v]) ans+=1ll*i*a[u],vis[u]=1,cnt+=a[u];
					else ans+=1ll*i*(a[v]+a[u]-1),vis[u]=vis[v]=1,cnt+=a[v]+a[u]-1; 
				}
			}
			if(cnt==n-1) break;
		}
	}
	cout<<ans;
	return 0;
}

为何以下代码 pair<int,int> 改为pair<short,short> 就从TLE变AC了。 int的效率不是比short高吗

2024/7/6 08:35
加载中...