zoukankan      html  css  js  c++  java
  • hdu 4619 Warm up 2(并查集)

    借用题解上的话,就是乱搞题。。

    题意理解错了,其实是坐标系画错了,人家个坐标系,我给当矩阵画,真好反了。对于题目描述和数据不符的问题,果断相信数据了(这是有前车之鉴的hdu 4612 Warm up,明明有重边,出题人欺骗我们的智商)然后就杯具了。

    我是用并查集搞得。

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 const int MAXN=105;
     5 
     6 int mp[MAXN][MAXN];
     7 int p[20000];
     8 int vis[20000];
     9 int find(int x)
    10 {
    11     return p[x]==x?x:p[x]=find(p[x]);
    12 }
    13 
    14 int main()
    15 {
    16     int n,m,i,j;
    17     int x,y;
    18     while(scanf("%d%d",&n,&m)!=EOF)
    19     {
    20         if(!n&&!m)
    21             break;
    22         memset(mp,0,sizeof(mp));
    23         for(i=1;i<=MAXN*MAXN;i++)
    24             p[i]=i;
    25         for(i=1;i<=n;i++)
    26         {
    27             scanf("%d%d",&x,&y);
    28             p[find(x*MAXN+y)]=find((x+1)*MAXN+y);
    29             mp[x][y]=mp[x+1][y]=1;
    30         }
    31         for(i=n+1;i<=n+m;i++)
    32         {
    33             scanf("%d%d",&x,&y);
    34             p[find(x*MAXN+y)]=find(x*MAXN+y+1);
    35             mp[x][y]=mp[x][y+1]=1;
    36         }
    37         memset(vis,0,sizeof(vis));
    38         for(i=0;i<MAXN;i++)
    39         {
    40             for(j=0;j<MAXN;j++)
    41             {
    42                 if(mp[i][j]){
    43                     vis[find(i*MAXN+j)]++;
    44                 }
    45             }
    46         }
    47         int s=0;
    48         for(i=0;i<MAXN*MAXN;i++)
    49         {
    50             if(vis[i])
    51                 s+=vis[i]/2;
    52         }
    53         printf("%d
    ",s);
    54     }
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    构建之法第九、十章读后感
    构建之法第七章读后感
    构建之法五、六章读后感
    构建之法第四章读后感
    一组阶段小记之再读构建之法
    打印控件
    TTS语音
    VS2005通过网络连接CE设备进行调试开发
    Windows XP下安装WinCE6.0开发环境
    利用VS2005创建WINCE 6.0 平台
  • 原文地址:https://www.cnblogs.com/zstu-abc/p/3224027.html
Copyright © 2011-2022 走看看