Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <algorithm>
- #include <map>
- #include <vector>
- #include <set>
- #include <cstdlib>
- #include <cstdio>
- using namespace std;
- const int maxn = 507;
- vector<string> S;
- map<string, int> idx;
- vector<int> g[maxn];
- bool used[maxn];
- int tin[maxn], timer = 0;
- int dfs(int v, int p = -1)
- {
- tin[v] = timer++;
- used[v] = true;
- int res = 0;
- for (int i = 0; i < (int)g[v].size(); ++i)
- {
- int to = g[v][i];
- if (used[to])
- {
- res = max(res, tin[to] - tin[v]);
- }
- else
- {
- res = max(res, dfs(to));
- }
- }
- return res;
- }
- int main()
- {
- //freopen("input.txt", "r", stdin);
- int n;
- cin >> n;
- vector<pair<string, string> > Q;
- for (int i = 0; i < n; ++i)
- {
- string a, b;
- cin >> a >> b;
- Q.push_back(make_pair(a, b));
- S.push_back(a);
- S.push_back(b);
- }
- sort(S.begin(), S.end());
- S.resize(distance(S.begin(), unique(S.begin(), S.end())));
- for (int i = 0; i < (int)S.size(); ++i)
- {
- idx[S[i]] = i;
- }
- for (int i = 0; i < n; ++i)
- {
- int a = idx[Q[i].first],
- b = idx[Q[i].second];
- g[a].push_back(b);
- g[b].push_back(a);
- }
- int ans = 0;
- for (int i = 0; i < (int)S.size(); ++i)
- {
- if (!used[i])
- {
- ans = max(ans, dfs(i));
- }
- }
- if (ans < 3)
- cout << 0;
- else
- cout << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement