Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define se second
  3. #define fi first
  4.  
  5. using namespace std;
  6.  
  7.  
  8. set < int > g[200010], comp;
  9. vector < int > obr;
  10. long long n, m, a, b, dn[200010],ans,xd;
  11. bool used[200010], used1[200010];
  12.  
  13. void dfs(int v){
  14.     used[v] = true;
  15.     for(auto u: g[v]){
  16.         if(!used[u]){
  17.             dfs(u);
  18.         }
  19.     }
  20.     obr.push_back(v);
  21. }
  22.  
  23. void dfs1(int v){
  24.     used1[v] = true;
  25.     comp.insert(v);
  26.     for(auto u: g[v]){
  27.         if(!used1[u]){
  28.             dfs1(u);
  29.         }
  30.     }
  31. }
  32.  
  33. int main(){
  34.     cin >> n >> m;
  35.     for(int i = 1; i <= m; i++){
  36.         cin >> a >> b;
  37.         g[a].insert(b);
  38.     }
  39.     for(int i = 1; i <= n; i++){
  40.         if(!used[i]){
  41.             dfs(i);
  42.         }
  43.     }
  44.    // reverse(obr.begin(), obr.end());
  45.     for(auto x: obr){
  46.        // cout << x << endl;
  47.         if(!used1[x]){
  48.             comp.clear();
  49.             dfs1(x);
  50.             if(comp.size() == 1){
  51.                 continue;
  52.             }
  53.             xd = comp.size() * (comp.size() - 1);
  54.             for(auto u: comp){
  55.                 xd -= g[u].size();
  56.             }
  57.             ans = max(xd,ans);
  58.         }
  59.     }
  60.     cout << ans;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement