蒟蒻求助T430959

题目总版

@[o7u7o](/user/530679) 你的并查集完全可以用一个数组来表示大小(启发式合并),最后输出直接是cout<<siz[find(1)]<<endl; ```cpp #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; #define pii pair<int,int> #define mp make_pair #define st string #define vint vector<int> #define vll vector<ll> #define For(i,l,r) for(int i=(int)(l);i<=(int)(r);i++) #define Refor(i,r,l) for(int i=(int)(r);i>=(int)(l);i--) #define pb push_back #define maxn 100005 int n,m; vll arr(maxn); //记录大小 vll siz(maxn,1); ll find(ll x) { if(x==arr[x]) { return x; } else { return arr[x]=find(arr[x]); } } void hebing(int k,int mid) { k=find(k); mid=find(mid); if(k==mid) { return; } //这里是个优化是让小的树接到大的树上去 if(siz[k]>siz[mid]) { swap(k,mid); } arr[k]=mid; siz[mid]+=siz[k]; } int main() { ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); //输入输出没什么好看的(写的很粗糙) cin>>n>>m; For(i,1,n) { arr[i]=i; } while(m--) { int p,k; cin>>p; cin>>k; p--; while(p--) { int mid; cin>>mid; hebing(k,mid); } } //最后就直接找1的群,输出大小 cout<<siz[find(1)]<<endl; return 0; } ```
by sll00 @ 2024-03-22 17:34:13


@[sll00](/user/1243869) %%%学到了,感谢大佬
by o7u7o @ 2024-03-23 09:55:12


@[sll00](/user/1243869) 但发现TLE是快读的问题,有点无语……
by o7u7o @ 2024-03-23 09:56:37


|