zoukankan      html  css  js  c++  java
  • 【网格图环判断】格子游戏

    传送门

    题意

    一个(n imes n)的方格阵,两个人轮流画(m)条边,输入一个起始点,和一个指令,
    (D)向下,(R)向右,如果出现封闭正方形,也就是环,输入第一个形成环的指令

    数据范围

    (1leq n leq 200)
    (1leq m leq 24000)

    题解

    将二维网格图的坐标映射到一维:

    • 下标(0)开始
    • (idx=x imes n+y)

    画出部分图形可以看出
    当合并两个点前两个点就属于同一个集合,合并后加的一条边就将这个集合变成一个环

    Code

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int fa[N],sz[N];
    int n,m;
    int find(int x){
        if(fa[x]!=x) fa[x]=find(fa[x]);
        return fa[x];
    }
    void merge(int a,int b){
        fa[find(a)]=find(b);
    }
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n*n;i++)
            fa[i]=i;
        for(int i=1;i<=m;i++){
            int x,y;
            char dir;
            cin>>x>>y>>dir;
            x--,y--;
            int a=x*n+y;
            if(dir=='D') x++;
            else y++;
            int b=x*n+y;
            if(find(a)==find(b)){
                cout<<i<<endl;
                return 0;
            }
            merge(a,b);
        }
        cout<<"draw"<<endl;
    }
    
  • 相关阅读:
    多校省选模拟33 C
    省选测试47 T2宝石(P5401 [CTS2019]珍珠) 题解
    省选测试39
    省选测试38
    省选测试37
    自嗨测试赛4
    自嗨测试赛3
    自嗨测试赛2
    自嗨测试赛1
    树状数组 学习笔记
  • 原文地址:https://www.cnblogs.com/hhyx/p/13424842.html
Copyright © 2011-2022 走看看