DuongNhi99

CJSCONNECT (lqdoj) - LienThongManh

Mar 26th, 2021 (edited)
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using i64 = long long;
  5. using pi32 = pair<int, int>;
  6. using pi64 = pair<i64, i64>;
  7.  
  8. const int N = 1e5 + 5;
  9. const int oo = 0x3c3c3c3c;
  10.  
  11. int n, nE;
  12. vector<int> graph[N];
  13.  
  14. int Num[N], Low[N];
  15. stack<int> st;
  16.  
  17. int Count = 0;
  18. vector<int> ans[N];
  19.  
  20. void visit(int u) {
  21.     static int time = 0;
  22.     Low[u] = Num[u] = ++time;
  23.     st.push(u);
  24.  
  25.     for (int v : graph[u])
  26.         if (Num[v])
  27.             Low[u] = min(Low[u], Num[v]);
  28.         else {
  29.             visit(v);
  30.             Low[u] = min(Low[u], Low[v]);
  31.         }
  32.  
  33.     if (Num[u] == Low[u]) {
  34.         ++Count;
  35.         int v;
  36.         do {
  37.             v = st.top(); st.pop();
  38.  
  39.             ans[Count].push_back(v);
  40.             Num[v] = Low[v] = oo;
  41.         } while (v != u);
  42.     }
  43. }
  44.  
  45. int main() {
  46. #ifdef LOCAL
  47.     freopen("in.txt", "r", stdin);
  48. #else
  49.     freopen("CJSCONNECT.inp", "r", stdin);
  50.     freopen("CJSCONNECT.out", "w", stdout);
  51. #endif // LOCAL
  52.     ios_base::sync_with_stdio(false);
  53.     cin.tie(NULL);
  54.  
  55.     cin >> n >> nE;
  56.     for (int i = 1; i <= nE; ++i) {
  57.         int u, v; cin >> u >> v;
  58.         graph[u].push_back(v);
  59.     }
  60.  
  61.     for (int i = 1; i <= n; i++)
  62.         if (!Num[i])
  63.             visit(i);
  64.  
  65.     int id = 0, maxLen = 0;
  66.     for(int i = 1; i <= Count; ++i) {
  67.         if (maxLen < (int)ans[i].size()) {
  68.             maxLen = ans[i].size();
  69.             id = i;
  70.         }
  71.     }
  72.  
  73.     sort(ans[id].begin(), ans[id].end());
  74.     cout << maxLen << '\n';
  75.     for (int u : ans[id])
  76.         cout << u << ' ';
  77.  
  78.     return 0;
  79. }
  80. // https://lqdoj.edu.vn/problem/cjsconnect
  81.  
  82. /*==========================================================================================================================================================================================================================================================================
  83. #include <bits/stdc++.h>
  84. using namespace std;
  85.  
  86. const int N = 1e5 + 5;
  87.  
  88. int n, nE;
  89. vector<int> graph[N];
  90.  
  91. int Num[N], Low[N];
  92. bool visited[N];
  93. stack<int> st;
  94.  
  95. int Count = 0;
  96. vector<int> ans[N];
  97.  
  98. void Tajan(int u) {
  99.     static int time = 0;
  100.     Num[u] = Low[u] = ++time;
  101.     st.push(u);
  102.     visited[u] = true;
  103.  
  104.     for (int v : graph[u]) {
  105.         if (Num[v] == -1) {
  106.             Tajan(v);
  107.             Low[u] = min(Low[u], Low[v]);
  108.         }
  109.         else if(visited[v])
  110.             Low[u] = min(Low[u], Num[v]);
  111.     }
  112.  
  113.     if (Num[u] == Low[u]) {
  114.         ++Count;
  115.         int v;
  116.         do {
  117.             v = st.top(); st.pop();
  118.  
  119.             ans[Count].push_back(v);
  120.             visited[v] = false;
  121.         } while (v != u);
  122.     }
  123. }
  124.  
  125. void solve() {
  126.     for (int i = 1; i <= n; i++) {
  127.         Num[i] = Low[i] = -1;
  128.         visited[i] = false;
  129.     }
  130.  
  131.     for (int i = 1; i <= n; i++)
  132.         if(Num[i] == -1)
  133.             Tajan(i);
  134.  
  135.     int id = 0, maxLen = 0;
  136.     for(int i = 1; i <= Count; ++i) {
  137.         if (maxLen < (int)ans[i].size()) {
  138.             maxLen = ans[i].size();
  139.             id = i;
  140.         }
  141.     }
  142.  
  143.     sort(ans[id].begin(), ans[id].end());
  144.     cout << maxLen << '\n';
  145.     for (int u : ans[id])
  146.         cout << u << ' ';
  147. }
  148.  
  149. int main() {
  150. #ifdef LOCAL
  151.    freopen("in.txt", "r", stdin);
  152. #else
  153.     freopen("CJSCONNECT.inp", "r", stdin);
  154.     freopen("CJSCONNECT.out", "w", stdout);
  155. #endif
  156.     ios_base::sync_with_stdio(false);
  157.     cin.tie(NULL);
  158.  
  159.     cin >> n >> nE;
  160.     for (int i = 1; i <= nE; ++i) {
  161.         int u, v; cin >> u >> v;
  162.         graph[u].push_back(v);
  163.     }
  164.  
  165.     solve();
  166.  
  167.     return 0;
  168. }
  169. */
  170.  
Add Comment
Please, Sign In to add comment