并查集1:格子游戏

简介: 并查集

Alice和Bob玩了一个古老的游戏:首先画一个 n×n 的点阵(下图 n=3 )。

接着,他们两个轮流在相邻的点之间画上红边和蓝边:

1.png

直到围成一个封闭的圈(面积不必为 1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了,他们的游戏实在是太长了!

他们甚至在游戏中都不知道谁赢得了游戏。

于是请你写一个程序,帮助他们计算他们是否结束了游戏?

输入格式
输入数据第一行为两个整数 n 和 m。n表示点阵的大小,m 表示一共画了 m 条线。

以后 m 行,每行首先有两个数字 (x,y),代表了画线的起点坐标,接着用空格隔开一个字符,假如字符是 D,则是向下连一条边,如果是 R 就是向右连一条边。

输入数据不会有重复的边且保证正确。

输出格式
输出一行:在第几步的时候结束。

假如 m 步之后也没有结束,则输出一行“draw”。

数据范围
1≤n≤200,
1≤m≤24000
输入样例:
3 5
1 1 D
1 1 R
1 2 D
2 1 R
2 2 D
输出样例:
4

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

const int N=40010;

int n, m;
int p[N];

int get(int x, int y)
{
    return x*n+y;
}


int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}


int main()
{
    scanf("%d %d", &n, &m);
    for(int i=1;i<=n*n;i++) p[i]=i;
    int res=0;
    for(int i=1;i<=m;i++)
    {
        int x, y;
        char d;
        cin>>x>>y>>d;
        x--, y--;
        int a=get(x, y);
        int b;
        if(d=='D') b=get(x+1, y);
        else b=get(x, y+1);
        
        int pa=find(a), pb=find(b);
        if(pa==pb)
        {
            res=i;
            break;
        }
        p[pa]=pb;
    }
    if(!res) puts("draw");
    else printf("%d\n", res);
    return 0;
}
相关文章
|
Kubernetes Java Serverless
进击的 Serverless:Java 应用如何从容地面对突增流量
进击的 Serverless:Java 应用如何从容地面对突增流量
104406 81
|
存储 安全 算法
KeyManager - 免费申请证书-支持泛域名
KeyManager - 免费申请证书-支持泛域名
1336 0
KeyManager - 免费申请证书-支持泛域名
|
安全 网络安全 网络虚拟化
什么是划分子网?网络工程师划分子网有啥技巧?
在网络工程中,划分子网是将大网络分割成多个小子网的技术,旨在优化网络性能、提升安全性和管理效率。本文介绍了子网的基本概念、划分子网的方法与步骤、网络工程师的技巧及实际应用案例,强调了合理规划的重要性。
985 4
|
SQL Oracle 关系型数据库
MySQL必知必会:MySQL中的Schema与DataBase
MySQL必知必会:MySQL中的Schema与DataBase
|
Python
还不会免费将PDF转为Word?你可以试试这3种工具!
还不会免费将PDF转为Word?你可以试试这3种工具!
593 0
|
Web App开发 Linux C++
Playwright系列(7):用VSCode 开始写Playwright 脚本
Playwright系列(7):用VSCode 开始写Playwright 脚本
2382 0
Playwright系列(7):用VSCode 开始写Playwright 脚本
|
C# 图形学
【Unity 3D】C#中String类的介绍及字符串常用操作详解(附测试代码 超详细)
【Unity 3D】C#中String类的介绍及字符串常用操作详解(附测试代码 超详细)
814 0
|
Ubuntu 关系型数据库 MySQL
Ubuntu 20.04 + mysql 8.0.27 用户名和密码修改(非常实用)
Ubuntu 20.04 + mysql 8.0.27 用户名和密码修改(非常实用)
|
机器学习/深度学习
1347:【例4-8】格子游戏
1347:【例4-8】格子游戏
293 0