【题目描述】

    Alice和Bob玩了一个古老的游戏:首先画一个n × n的点阵(下图n = 3)。接着,他们两个轮流在相邻的点之间画上红边和蓝边:

    直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。计算他们是否结束了游戏。

【题目链接】

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1347

【算法】  

    并查集解决的是连通性(无向图联通分量)和传递性(家谱关系)问题,并且可以动态的维护。抛开格子不看,任意一个图中,增加一条边形成环当且仅当这条边连接的两点已经联通,于是可以将点分为若干个集合,每个集合对应图中的一个连通块。

【代码】

 1 #include <bits/stdc++.h>
 2 #define P pair<int,int>
 3 #define fst first
 4 #define snd second
 5 using namespace std;
 6 P fa[210][210];
 7 int n,m;
 8 P Get(P x)
 9 {
10     if(fa[x.fst][x.snd]==x) return x;
11     return fa[x.fst][x.snd]=Get(fa[x.fst][x.snd]);
12 }
13 void Merge(P x,P y)
14 {
15     P root=Get(x);
16     fa[root.fst][root.snd]=Get(y);
17 }
18 int main()
19 {
20     scanf("%d%d",&n,&m);
21     for(int i=1;i<=n;i++)
22         for(int j=1;j<=n;j++)
23             fa[i][j].fst=i,fa[i][j].snd=j;
24     for(int i=1;i<=m;i++) {
25         P x,y; char s[2];
26         scanf("%d%d%s",&x.fst,&x.snd,s);
27         if(s[0]=='R') y.fst=x.fst,y.snd=x.snd+1;
28         else y.fst=x.fst+1,y.snd=x.snd;
29         if(Get(x)!=Get(y)) Merge(x,y);
30         else {
31             printf("%d\n",i);
32             return 0;
33         }
34     }
35     puts("draw");
36     return 0;
37 }

转载于:https://www.cnblogs.com/Willendless/p/9452633.html

1347 格子游戏 (并查集)相关推荐

  1. bzoj 4886: [Lydsy2017年5月月赛]叠塔游戏 并查集

    题意 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它 ...

  2. CODJ 1070 秋实大哥打游戏 并查集

    有N个独立的点,标号为1,2,3,-N.现在要把他们连接起来,每次选取x和y两个点,x是它所处集合的中心,y不一定是它所处集合的中心,然后在xy间连一条长度为|x-y|mod1000的边.然后把这两个 ...

  3. 【高级数据结构】并查集

    目录 A.AcWing 1250. 格子游戏 B.AcWing 1252. 搭配购买 C.AcWing 237. 程序自动分析 D.AcWing 239. 奇偶游戏 E.AcWing 238. 银河英 ...

  4. 并查集专题(亲戚,格子游戏,银河英雄传说)

    文章目录 序言 正文 亲戚 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 输入 输出 样例输入 样例输出 讲解 Wrong Answer Code Accepted Code ...

  5. 【并查集专题】格子游戏

    [并查集专题]格子游戏 题目描述 Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为 ...

  6. 并查集——格子游戏(简单应用)

    传送门:格子游戏 思路:将图上的每一个点都用他们的坐标转化成一个具体的数字表示做一个点,如 (x,y)可以表示成a= x*n+y.每次向右和向下扩展的时候就相当于将两个点所在的并查集树合并,在合并之前 ...

  7. 格子游戏(并查集)——信奥一本通

    题目: Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3)   接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为1)为止," ...

  8. BZOJ-1854-[Scoi2010]游戏(并查集)

    Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...

  9. CDOJ 1070 秋实大哥打游戏 带权并查集

    链接 F - 秋实大哥打游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit ...

  10. 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集

    秋实大哥打游戏 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...

最新文章

  1. 你是怎样给下属分配工作
  2. 粤教版管理计算机中的文件教案,最新粤教版初中信息技术第一册教案(全册).docx...
  3. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】
  4. html转换react native,React native HTML entities
  5. fastjson jar包_经过性能对比,我发现温少的FastJson真牛。
  6. 前端学习(2658):vue3 computed
  7. 微信小程序中rpx与rem单位使用
  8. element ui el-carousel 滚动图 vue 基于vue-lazyload图片懒加载、延迟加载 解决方案
  9. open***成功配置思考
  10. 5.1 凸二次规划问题
  11. Excel最强玩法!只用Excel就能做出「王者荣耀」战绩表
  12. php 百度地图根据经纬度获取地址,百度地图 根据经纬度获取地址
  13. 视频压缩软件,视频压缩软件哪个最好用?
  14. python中matplotlib绘图中文显示问题
  15. FME2019试用过程
  16. MATLAB | 如何在MATLAB中使用python全部colormap配色
  17. 使用selenium爬取fofa中的网站链接
  18. 推一款基于原生的小程序(埋点)插件:ani-weapp
  19. .net mapi_使用C#.NET通过MAPI访问收件箱
  20. 星际争霸1终于可以在win10上运行了

热门文章

  1. A[1080]Graduate Admission 两个cmp比较函数两个struct结构体
  2. php 卷积神经网络,PyTorch上实现卷积神经网络CNN的方法
  3. php扩展leonis,LNMP环境部署
  4. 畅想未来计算机300字,畅想未来作文300字
  5. 带有RNN循环神经网络的机器学习 4 NLP 从零到英雄 ML with Recurrent Neural Networks
  6. 极客大学产品经理训练营:需求评审 第13课总结
  7. mysql--id主键列乱了之后,重新排序
  8. 【ML小结3】线性回归与逻辑回归、softmax回归
  9. tensorflow学习笔记(1):使用入门
  10. 数据库基础(2)选择,投影,连接,除法运算