码迷,mamicode.com
首页 > 其他好文 > 详细

ZJNU 1333 - 第二题 blocks--中高级

时间:2020-01-27 00:14:53      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:col   for   clu   情况   int   lse   block   uri   sizeof   

因为放一个就需要判断一次,每一次跑一遍全图bfs显然是不现实的

又因为点只有三种,黑白无

所以可以用并查集优化

添加一个棋子就判断周围四个的组别情况

注意出现的情况与答案关系之间的判别

 1 /*
 2 Written By StelaYuri
 3 */
 4 #include<stdio.h>
 5 #include<memory.h>
 6 int N,M,dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},gp[250010];
 7 char cm[505][505];
 8 int findp(int p){
 9     return p==gp[p]?p:(gp[p]=findp(gp[p]));
10 }
11 int prime(int x,int y){
12     return x>=0&&y>=0&&x<N&&y<N;
13 }
14 int main(){
15     int i,j,X,Y,xx,yy,ans=0,g,d1,d2;
16     char C;
17     memset(cm,.,sizeof cm);
18     for(i=0;i<250000;i++)
19         gp[i]=i;
20     scanf("%d%d",&N,&M);
21     for(i=0;i<M;i++){
22         scanf("%*c%c%d%d",&C,&X,&Y);
23         ans++;
24         for(g=j=0;j<4;j++){
25             xx=X-1+dx[j];
26             yy=Y-1+dy[j];
27             if(prime(xx,yy)&&cm[xx][yy]==C){
28                 d1=findp(gp[(X-1)*N+(Y-1)]);
29                 d2=findp(gp[xx*N+yy]);
30                 if(!g){//周围4个位置如果还没有找到一个同集合的,可以直接合并并减少一个答案组
31                     g=1;
32                     if(d1!=d2){
33                         if(d1<d2)
34                             gp[d2]=d1;
35                         else
36                             gp[d1]=d2;
37                     }
38                     ans--;
39                 }
40                 else{//周围4个位置如果已经找到一个同组的了,只有两个点所在的集合不同时才需要合并并减少一个答案组
41                     if(d1!=d2){
42                         if(d1<d2)
43                             gp[d2]=d1;
44                         else
45                             gp[d1]=d2;
46                         ans--;
47                     }
48                 }
49             }
50         }
51         cm[X-1][Y-1]=C;
52         printf("%d\n",ans);
53     }
54     
55     return 0;
56 }

 

ZJNU 1333 - 第二题 blocks--中高级

标签:col   for   clu   情况   int   lse   block   uri   sizeof   

原文地址:https://www.cnblogs.com/stelayuri/p/12234942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!