Official
F - ドミノ倒し / Domino Effect Editorial
by
F - ドミノ倒し / Domino Effect Editorial
by
kyopro_friends
各ドミノ(を表す文字列)を頂点とし、「ドミノ \(s\) を倒すとドミノ \(t\) が倒れる」という情報が与えられているとき、頂点 \(s\) から 頂点 \(t\) への有向辺があるようなグラフを考えます。
この問題は、こうして作られたグラフにおいて、頂点 \(X\) から頂点 \(Y\) に移動することが可能であるかを判定すること同値であるため、DFSやBFSなどの探索アルゴリズムを用いることで解くことができます。
実装例(C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
string start, goal;
cin >> start >> goal;
unordered_map<string, vector<string>> G;
for(int i=0;i<n;i++){
string s, t;
cin >> s >> t;
G[s].push_back(t);
}
unordered_set<string> visited;
auto dfs=[&](auto self, string v){
if(v==goal)return true;
if(visited.contains(v))return false;
visited.insert(v);
return any_of(G[v].begin(), G[v].end(), [&](string vv){return self(self,vv);});
};
if(dfs(dfs,start)){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
}
posted:
last update:
