题意:给定多个单词,每个单词的首字母可以到末字母,问能否由 'b' 到 'm'。
分析:将每个单词首尾字母建图,dfs('b') 将能到的所有字母进行标记,最后检查 'm' 是否被标记。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10, INF = 0x3f3f3f3f;
vector<int> G[26];
bool st[26];
void dfs(int u) {
st[u] = 1;
for (int v : G[u]) if (!st[v]) dfs(v);
}
int main() {
string s;
while (cin >> s) {
if (s == "0") {
memset(st, 0, sizeof(st));
dfs('b' - 'a');
if (st['m' - 'a']) cout << "Yes.\n";
else cout << "No.\n";
for (int i = 0; i < 26; i++) G[i].clear();
continue;
}
int u = s[0] - 'a', v = s[s.size() - 1] - 'a';
G[u].push_back(v);
}
return 0;
}
标签:HDU,int,字母,dfs,st,单词,1181
From: https://www.cnblogs.com/hellohebin/p/17247516.html