Advertisement
oleg_drawer

Untitled

Apr 18th, 2020
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. vector < vector <int>> g(0);
  8. vector <int> used;
  9. string s;
  10. vector<vector<int>> let(0);
  11.  
  12. int MAX;
  13. bool rep;
  14.  
  15.  
  16. void dfs(int v)
  17. {
  18.  
  19.     if (rep) return;
  20.  
  21.     used[v] = 1;
  22.  
  23.     for (auto u : g[v])
  24.     {
  25.         if (used[u] == 1)
  26.         {
  27.             rep = true;
  28.             return;
  29.         }
  30.         if (used[u] == 2)
  31.             continue;
  32.         dfs(u);
  33.     }
  34.     if (rep) return;
  35.     for( auto u : g[v]){
  36.         for(int i = 0; i < 26; i++)
  37.             let[v][i] = max(let[v][i], let[u][i]);
  38.     }
  39.     let[v][s[v]-'a']++;
  40.     used[v] = 2;
  41. }
  42.  
  43. int main() {
  44.  
  45.     int n,m; // вершин, ребер
  46.     cin >> n >> m;
  47.  
  48.     g.resize(n, vector<int>(0));
  49.     used.resize(n, 0);
  50.     let.resize(n, vector<int>(26, 0));
  51.     cin >> s;
  52.  
  53.  
  54.     for (int i = 0; i < m; i++)
  55.     {
  56.         int v,u;
  57.         cin >> v >> u;
  58.         v--;
  59.         u--;
  60.         g[v].push_back(u);
  61.     }
  62.  
  63.     for(int i = 0; i < n; i++)
  64.         if(used[i] == 0 && !rep)
  65.             dfs(i);
  66.  
  67.  
  68.     if (rep)
  69.         cout << -1;
  70.     else{
  71.         for(int i = 0; i < n; i++)
  72.             for(int j = 0; j < 26; j++)
  73.                 MAX = max(MAX, let[i][j]);
  74.         cout << MAX;
  75.        
  76.     }
  77.  
  78.  
  79.  
  80.  
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement