代码只差一个点TLE... :-(
#pragma GCC optimize(3, "Ofast", "inline")
#include <bits/stdc++.h>
using namespace std;
map<string, vector<string> > a;
map<string, bool> f;
set<string> fr;
map<string, bool> dnt;
bool h(const string& t) {
if (f[t] == true)
return true;
f[t] = true;
dnt[t] = true;
for (const string& i : a[t])
if (h(i) == true)
return true;
return false;
}
int main() {
int n;
scanf("%d", &n);
for (register int i = 0; i < n; ++i) {
string tmp1, tmp2;
cin >> tmp1 >> tmp2;
a[tmp1].push_back(tmp2);
fr.insert(tmp1);
}
bool flag = false;
for (auto i : fr) {
if (dnt[i] == false) {
flag = flag || h(i);
f.clear();
}
}
printf("%s", (flag ? "No": "Yes"));
return 0;
}