求调
查看原帖
求调
1333328
Co_Ce楼主2025/8/3 19:47
#include <bits/stdc++.h>

using namespace std;

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9') {
		if(ch == '-') {
			f = -1;
		}
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') {
		x = x * 10 + ch - 48;
		ch = getchar();
	}
	return x * f;
}

inline void print(int x) {
	if(x < 0) {
		putchar('-');
		x = -x;
	}
	if(x > 9) {
		print(x / 10);
	}
	putchar(x % 10 + 48);
}

constexpr int N = 1e6 + 10;

int T;

int n, m;

int f[N];

int a;

int sum;

string s[N];

inline void init() {
	for(int i = 1; i <= n * m; i++) {
		f[i] = i;
	}
	return ;
}

inline int find(int x) {
	if(f[x] == x) {
		return x;
	}
	return f[x] = find(f[x]);
}

inline void merge(int x, int y) {
	int fx = find(x), fy = find(y);
	if(fx != fy) {
		f[fy] = fx;
	}
	return ;
}

int main() {
	
	ios :: sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	
	T = read();
	while(T--) {
		
		n = read(), m = read();
		for(int i = 1; i <= n; i++) {
			cin >> s[i];
			s[i] = ' ' + s[i];
		}
		init();
		sum = 0;
		
		for(int i = 1; i <= n; i++) {
			for(int j = 1; j <= m; j++) {
				a = read();
				if(s[i][j] == 'u') {
					if(i - a > 0) {
						merge((i - 1) * m + j, (i - 1 - a) * m + j);
					}
				}
				else if(s[i][j] == 'd') {
					if(i + a <= n) {
						merge((i - 1) * m + j, (i + a - 1) * m + j);
					}
				}
				else if(s[i][j] == 'l') {
					if(j - a > 0) {
						merge((i - 1) * m + j, (i - 1) * m + j - a);
					}
				}
				else if(s[i][j] == 'r') {
					if(j + a <= m) {
						merge((i - 1) * m + j, (i - 1) * m + j + a);
					}
				}
			}
		}
		
		for(int i = 1; i <= n * m; i++) {
			if(f[i] == i) {
				sum++;
			}
		}
		if(sum == 1) {
			cout << "Yes\n";
		}
		else {
			cout << "No\n";
		}
	}
	
	return 0;
}
2025/8/3 19:47
加载中...