D - Harmonious Graph(并查集)(此题需补)
Posted aaazhuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D - Harmonious Graph(并查集)(此题需补)相关的知识,希望对你有一定的参考价值。
题意:一共n个点,m条线
若点a连通点b 则对于任何a<c<b,a均与b连通,若不连通,则你需要加边上去
问你需要加多少条边
采用并查集是因为 对于所有小于b并且与b连通的a 均用并查集代替
而其中一个点并查集不等于最大的b时 就需要加边上去 ans++
#include<iostream> #include<map> #include<algorithm> #include<set> using namespace std; const int maxn = 2e5+10; int f[maxn]; int n,m; int Find(int x) { if(f[x]==x) return x; f[x]=Find(f[x]); return f[x]; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) f[i]=i; while(m--) { int x,y,fx,fy; cin>>x>>y; fx=Find(x); fy=Find(y); if(fx>fy) swap(fx,fy); f[fx]=fy; } int ans=0; for(int i=1;i<=n;i++) { int x=Find(i); while(i<x) { int y=Find(i); if(x!=y) { ans++; if(x<y) swap(x,y); f[y]=x; } i++; } } cout<<ans<<endl; return 0; }
以上是关于D - Harmonious Graph(并查集)(此题需补)的主要内容,如果未能解决你的问题,请参考以下文章
[hdu 5354] Bipartite Graph 分治 并查集
UOJ_14_UER #1DZY Loves Graph_并查集