4619——Warm up 2

来源:互联网 发布:mysql decode 函数 编辑:程序博客网 时间:2024/06/05 14:06

 并查集

 

#include<iostream>#include<cstring>#include<cstdio>using namespace  std;int map[110][110];int father[2100];int vis[2100];int getfather(int x){while(father[x]!=-1){x=father[x];}return x;}void Union(int x,int y){int fx=getfather(x);int fy=getfather(y);if(fx!=fy)father[fx]=fy;}int main(){    int n,m;    int x,y;    while (~scanf("%d%d",&n,&m)&&n+m)    {        memset(map,0,sizeof(map));        memset(father,-1,sizeof(father));        memset(vis,0,sizeof(vis));        for (int i = 1; i <= n; i++)        {            scanf("%d%d",&x,&y);            map[x][y]=i;        }        for (int i = n+1; i <= n+m; i++)        {            scanf("%d%d",&x,&y);            if (map[x][y])Union(map[x][y],i);            if (x>0&&map[x-1][y])            Union(map[x-1][y],i);            y++;            if (map[x][y])    Union(map[x][y],i);            if (x>0&&map[x-1][y])    Union(map[x-1][y],i);        }        for(int i=1;i<=n+m;i++)        vis[getfather(i)]++;       int ans=0;       for(int i=1;i<=n+m;i++)ans+=vis[i]/2;ans=n+m-ans;printf("%d\n",ans);    }    return 0;}


 

原创粉丝点击