变形课 HDU - 1181 (dfs)

发布时间 2023-03-23 15:10:56作者: HelloHeBin

题意:给定多个单词,每个单词的首字母可以到末字母,问能否由 '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;
}