Endless holiday
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
void solve() {
int n, m;
cin >> n >> m;
vector<vector<int>> G(n+1);
bool flg = 0;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
int len;
cin >> len;
vector<string> a(n+1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
G[i].push_back(i);
// cout << a[i] << endl;
}
vector<vector<int>> f(n+1,vector<int>(len+1));
auto dfs = [&] (auto&&self, int x, int y) {
if (flg) return;
if (f[x][y] == 1) {
flg = true;
return;
} else if (f[x][y] == 2) {
return;
}
f[x][y] = 1;
for (auto i : G[x]) {
if (a[i][(y+1)%len] == 'o') {
self(self,i,(y+1)%len);
}
}
f[x][y] = 2;
};
for (int i = 1; i <= n; i++) {
if (a[i][0] == 'o' && !flg) {
dfs(dfs,i,0);
}
}
if (flg) {
cout << "Yes";
} else {
cout << "No";
}
cout << '\n';
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt = 1;
cin >> tt;
while (tt--) {
solve();
}
return 0;
}
dfs判环即可,判环啊,可以多记个状态表示死路。