请问一下vector配上sort的时间复杂度
  • 板块学术版
  • 楼主张子健
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/6/26 23:02
  • 上次更新2023/11/3 12:21:17
查看原帖
请问一下vector配上sort的时间复杂度
180777
张子健楼主2023/6/26 23:02
刚才做了一道题,最小生成树,用vector+sort后T了,发现是sort导致的,想问一下原因
附上代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e3+5;
vector<pair<int,pair<int,int> > >g;
int n,m,fa[N],a[N];
int find(int x)
{
	int r=x;
	while(r!=fa[r]) r=fa[r];
	while(x!=r)
	{
		int p=fa[x];
		fa[x]=r;
		x=p;
	}
	return r;
}
void join(int x,int y)
{
	int fx=find(x);
	int fy=find(y);
	if(fx!=fy) fa[fx]=fy;
}
int kruscal()
{
	int ans=0,k=0;
	for(int i=0;i<g.size();i++)
	{
		int u=g[i].second.first;
		int v=g[i].second.second;
		int w=g[i].first;
		if(find(u)!=find(v))
		{
			join(u,v);
			ans+=w;
			++k;
			if(k==n-1) return ans;
		}
	}
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=n;i++) cin>>a[i];
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(j>=i) continue;
			g.push_back(make_pair(-(a[i]^a[j]),make_pair(i,j)));
			g.push_back(make_pair(-(a[i]^a[j]),make_pair(j,i)));
		}
	}
	double ft=clock();
	sort(g.begin(),g.end());
	double fe=clock();
	cout<<fixed<<fe-ft<<endl;
	int sum=kruscal();
	
	cout<<sum*-1;
	return 0;
}
/*
*/
2023/6/26 23:02
加载中...