首页 > 其他分享 >UTPC 2021 L Maze Game

UTPC 2021 L Maze Game

时间:2023-09-30 19:55:23浏览次数:41  
标签:typedef int long dep Game UTPC low Maze define

洛谷传送门

AtCoder 传送门

若图中存在点使得删去它后 \(S, T\) 不连通,那么 A 可以一步获胜。

否则,双方都不会删去一个点使得删去它后会产生一个点使得删去它后 \(S, T\) 不连通。那么到最后图上会剩下两条 \(S \to T\) 的不交路径。此时一方无论如何操作都会使得另一方获胜。

因为这是二分图,所以这两条路径的并的点数一定为偶数。那么只用判断初始时非障碍格数量的奇偶性,就能知道到达终态步数的奇偶性。

时间复杂度 \(O(\sum nm)\)。

注意不能直接套割点的板子。

code
// Problem: L - Maze Game
// Contest: AtCoder - UTPC 2021
// URL: https://atcoder.jp/contests/utpc2021/tasks/utpc2021_l
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define ID(x, y) (((x) - 1) * m + (y))
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<int, int> pii;

const int maxn = 110;
const int maxm = 10050;

int n, m, dep[maxm], low[maxm], fa[maxm];
char s[maxn][maxn];
vector<int> G[maxm];

void dfs(int u) {
	low[u] = dep[u];
	for (int v : G[u]) {
		if (!dep[v]) {
			fa[v] = u;
			dep[v] = dep[u] + 1;
			dfs(v);
			low[u] = min(low[u], low[v]);
		} else {
			low[u] = min(low[u], dep[v]);
		}
	}
}

void solve() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n * m; ++i) {
		vector<int>().swap(G[i]);
		dep[i] = low[i] = fa[i] = 0;
	}
	int cnt = 0;
	for (int i = 1; i <= n; ++i) {
		scanf("%s", s[i] + 1);
		for (int j = 1; j <= m; ++j) {
			cnt += (s[i][j] != '#');
		}
	}
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= m; ++j) {
			if (i < n && s[i][j] != '#' && s[i + 1][j] != '#') {
				G[ID(i, j)].pb(ID(i + 1, j));
				G[ID(i + 1, j)].pb(ID(i, j));
			}
			if (j < m && s[i][j] != '#' && s[i][j + 1] != '#') {
				G[ID(i, j)].pb(ID(i, j + 1));
				G[ID(i, j + 1)].pb(ID(i, j));
			}
		}
	}
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= m; ++j) {
			if (s[i][j] == 'S') {
				dep[ID(i, j)] = 1;
				dfs(ID(i, j));
			}
		}
	}
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= m; ++j) {
			if (s[i][j] == 'G') {
				int u = ID(i, j);
				while (fa[fa[u]]) {
					if (low[u] >= dep[u] - 1) {
						puts("Alice");
						return;
					}
					u = fa[u];
				}
			}
		}
	}
	puts((cnt & 1) ? "Alice" : "Bob");
}

int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,int,long,dep,Game,UTPC,low,Maze,define
From: https://www.cnblogs.com/zltzlt-blog/p/17738151.html

相关文章

  • Galgame封包逆向入门
    Galgame封包逆向入门这里就简单聊一下封包逆向分析的一些注意点吧,其实也是初入逆向的注意点了,本质差不多。正向基础语言基础:ASM、C、C++平台基础:Win32、PE、GDI、DirectX引擎基础:游戏引擎架构虽然说的逆向,其实和正向的水平、见识、经验是强相关的,如果你没写过相关的程序又......
  • GameFi链游系统开发应用
      GameFi软件的开发是结合了区块技术,它是将游戏的元素移动到上链上,让游戏变得独立,这就符合了用户的娱乐方式。该软件项目还具有一定的投资价格,GameFi系统开发的应用可以带来更多的创新和价值。  GameFi的软件开发应用程序是让用户更好的管理自己的资产,有助于游戏的稳定,持......
  • CF1882C Card Game
    某种程度上的抽卡游戏?有这样一个结论:一个后缀中\([i+1,n]\)中所有的正数都可以被取到,所以维护一个正数后缀和\(s_i\),枚举每个位置\(i\),如果\(i\)为奇数,答案对\(a_i+s_{i+1}\)取\(\max\),否则对\(s_{i+1}\)取\(\max\)。下面证明这个结论:先依次取掉\([i+1,n]\)中的奇......
  • Strategic game POJ - 1463 树的最小点覆盖,树形dp
    题意:树的最小点覆盖,选择最少的点覆盖所有边。分析:状态:f[u][0/1]表示不选/选编号u的点的最优解转移:不选u,则一定选u的儿子v,即f[u][0]+=f[v][1]选u,则可以选,也可以不选u的儿子v,即f[u][1]+=min(f[v][0],f[v][1]);目标:ans=min(f[rt][0],f[rt][1]);点击查看代码#inc......
  • Python游戏开发:Pygame库入门
    Pygame是一个开源的Python库,用于开发2D游戏。它提供了许多功能,如游戏开发、音频处理和事件处理。安装Pygame库您可以通过以下命令在终端中安装Pygame库:pipinstallpygame创建游戏窗口要创建一个游戏窗口,您可以使用以下代码:importpygamepygame.init()#设置窗口尺寸window_......
  • [CF235D] Graph Game
    GraphGame乌克兰逃兵在线发题解。好像要用期望去推,但是像我这种看到序列的期望题只想得到线性性的弱鸡只能感理了。我们把点分治过程当成点分树,y能在x被爆时做贡献当且仅当y为x的子树。先考虑树的情况。考虑把遍历t的次数分到单个点上发现仅当x为x->y路径上......
  • Precomputed Radiance Transfer(games202)
    PrecomputedRadianceTransfer(games202)关于BRDF可以看看这篇文章基于物理着色:BRDF物体在不同光照下的表现不同,PRT(PrecomputedRadianceTransfer)是一个计算物体在不同光照下表现的方法。光线在一个环境中,会经历反射,折射,散射,甚至还会物体的内部进行散射。为了模拟具有真实......
  • POJ 2935 Basic Wall Maze BFS
    注意墙的处理,我是这么做的,把每个方块不能行走的方向标记出来,剩他的就是传统BFS了。#include<stdio.h>#include<queue>usingnamespacestd;intsx,sy,ex,ey;inth[4]={1,-1,0,0};intg[4]={0,0,1,-1};intdir[8][8][5];boolvisit[7][7];structpoint{ intx; inty; in......
  • HDU 1054 Strategic Game 树形DP/二分图匹配
    第一次写博文,想了半天就拿一道dp/graph的题作为处作吧此题有两种常见解法(题意比较简单,就不赘述)1.二分图最大匹配       此题等价于问一棵树中最小点覆盖数。树形结构可以把它看做是一个二分图,一个点集为奇数层,另一个点集为偶数层,显然满足二分图定义,可以套用求二分图最小点......
  • Epic Games Launcher 提示 应用程序无法正常启动(0xc000007b)
    事件起因:在给某同事安装EpicGamesLauncher报错,提示应用程序无法正常启动(0xc000007b) 解决办法: 用DirectX修复工具扫一下,修复一下C++插件,一般是由于MicrosoftVisualC++2017缺失或未正确引用引起的......