zoukankan      html  css  js  c++  java
  • CF 292 D.Connected Components

    CF 292 D

    Solution:

    并不是不会合并并查集.

    而是数组开小了哦.

    然后并不是RE了哟.

    WAWAWAWA

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    using namespace std;
    const int MAXN=500;
    const int MAXM=20000;
    int n,m,k;
    int u[MAXM+10],v[MAXM+10];
    int s0[MAXM+10][MAXN+10],s1[MAXM+10][MAXN+10];
    int p[MAXN+10];
    int* fa;
    int find(int x){return (fa[x]==x)?x:(fa[x]=find(fa[x]));}
    void hb(int x,int y)
    {
    	x=find(x);y=find(y);
    	if(x!=y)fa[x]=y;
    }
    int main(void)
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;++i)scanf("%d%d",u+i,v+i);
    	for(int i=1;i<=n;++i)s0[0][i]=s1[m+1][i]=i;
    	for(int i=1;i<=m;++i)
    	{
    		for(int j=1;j<=n;++j)s0[i][j]=s0[i-1][j];
    		fa=s0[i];
    		hb(u[i],v[i]);
    		for(int j=1;j<=n;++j)find(j);
    	}
    	for(int i=m;i;--i)
    	{
    		for(int j=1;j<=n;++j)s1[i][j]=s1[i+1][j];
    		fa=s1[i];
    		hb(u[i],v[i]);
    		for(int j=1;j<=n;++j)find(j);
    	}
    	scanf("%d",&k);
    	while(k--)
    	{
    		int l,r;
    		scanf("%d%d",&l,&r);
    		for(int i=1;i<=n;++i)p[i]=i;
    		fa=p;
    		for(int i=1;i<=n;++i)hb(s0[l-1][i],i);
    		for(int i=1;i<=n;++i)hb(s1[r+1][i],i);
    		int ans=0;
    		for(int i=1;i<=n;++i)if(p[i]==i)++ans;
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    QML学习笔记之一
    使用 DLL 的优点
    制作Windows的ico图标
    CentOS安装JDK
    CentOS 7中安装和配置Promethues
    查看和指定SpringBoot内嵌Tomcat的版本
    CentOS中安装Azkaban 2.5
    Centos7 安装Nodejs
    SpringBoot实用技巧札记
    SQL实用札记【SQL Sever篇】
  • 原文地址:https://www.cnblogs.com/DOlaBMOon/p/7575518.html
Copyright © 2011-2022 走看看