本蒟蒻初学OI,有些小问题请教大佬们

学术版

加边的时候就用并查集维护一下
by aiyougege @ 2018-06-16 11:16:31


检查连通图时,并查集应该是最快的吧
by Siyuan @ 2018-06-16 11:17:59


每次`add_edge(u,v)`时`fa[get_fa()u]=get_fa(v)`就行了
by Siyuan @ 2018-06-16 11:18:39


@[siyuan](/space/show?uid=49725) 可这不是生成并查集的做法吗?跟检查图是否连通有什么直接关系?并查集形成好几组的话整个图不也不连通么
by 少帅_zjm @ 2018-06-16 11:23:06


```c++ #include<cstdio> #define N 200005 using namespace std; struct Edge{ int v,nxt; }e[N]; int head[N],tot; void AddEdge(int u,int v){ e[++tot]=(Edge){v,head[u]};head[u]=tot; e[++tot]=(Edge){u,head[v]};head[v]=tot; } int f[N]; int find(int s){ return f[s]==s?s:f[s]=find(f[s]); } int main(){ int n,m,a,b,siz=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i)f[i]=i; for(int i=1;i<=m;++i){ scanf("%d%d",&a,&b); if(find(a)!=find(b))++siz; f[find(a)]=find(b); } if(siz>n-2) printf("true"); else printf("false"); } ```
by aiyougege @ 2018-06-16 11:27:55


@[少帅_zjm](/space/show?uid=46694) 大概可以这么做
by aiyougege @ 2018-06-16 11:28:13


@[aiyougege](/space/show?uid=39067) 把那个size>n-2改成size==n-1行吗?
by 少帅_zjm @ 2018-06-16 11:36:26


n-1不是说形成一棵树嘛
by 少帅_zjm @ 2018-06-16 11:37:19


可以吧
by aiyougege @ 2018-06-16 11:40:46


|