为什么O(n^2+m)的算法能过
查看原帖
为什么O(n^2+m)的算法能过
815386
_ZML_楼主2024/9/20 15:23
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=10010;
vector<int> edge[maxn];
int fa[maxn];
int ans[maxn],tag[maxn];
int get(int x) {
	return fa[x]==x?x:fa[x]=get(fa[x]);
}
signed main() {
	cin.tie(0), cout.tie(0);
	ios::sync_with_stdio(0);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++) {
		int op,x,y;
		cin>>op>>x>>y;
		if(op==1) {
			int fax=get(x),fay=get(y);
			if(fax==fay) continue;
			for(int i=1;i<=n;i++) {
				ans[i]+=tag[get(i)];
			}
			for(int i=1;i<=n;i++) tag[i]=0;
			fa[fay]=fax;
			
		}
		else {
			tag[get(x)]+=y;
		}
	}
	for(int i=1;i<=n;i++) cout<<ans[i]+tag[get(i)]<<" ";
	return 0;
}

我写的代码的时间复杂度应该是 O(n2+m)O(n^2+m) 的,为什么能过呢?

2024/9/20 15:23
加载中...