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\n",s);
54     }
55     return 0;
56 }
View Code

 

转载于:https://www.cnblogs.com/zstu-abc/p/3224027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值