Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Thành phần song liên thông
- #include <bits/stdc++.h>
- #define int64_t long long
- using namespace std;
- const int N = 100005;
- int n, m;
- vector<int> graph[N];
- int cnt = 0;
- int Low[N], Visited[N];
- stack<int> st;
- int Parent[N], Last[N];
- int Count = 0, Ans;
- bool minimize(int &a, int b) { if(a > b) a = b; else return false; return true; }
- bool maximize(int &a, int b) { if(a < b) a = b; else return false; return true; }
- void visit(int u) {
- Low[u] = Visited[u] = ++cnt;
- for(int i = 0, v; v = graph[u][i]; ++i) {
- if(Visited[v])
- minimize(Low[u], Visited[v]);
- else {
- st.push(u);
- Parent[v] = u;
- visit(v);
- minimize(Low[u], Low[v]);
- if(Low[v] >= Visited[u]) {
- int Current = 0;
- Count++;
- do {
- v = st.top();
- st.pop();
- if(maximize(Last[v], Count))
- Current++;
- } while(u != v);
- maximize(Ans, Current);
- }
- }
- }
- st.push(u);
- }
- int main(){
- #ifdef LOCAL
- freopen("in.txt", "r", stdin);
- #else
- freopen("SAFENET2.inp", "r", stdin);
- freopen("SAFENET2.out", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- cin >> n >> m;
- for(int i = 1; i <= m; i++){
- int u, v; cin >> u >> v;
- graph[u].push_back(v);
- graph[v].push_back(u);
- }
- for(int i = 1; i <= n; i++)
- graph[i].push_back(0);
- for(int i = 1; i <= n; i++)
- if(!Visited[i]) visit(i);
- cout << max(Ans, 1) << '\n';
- return 0;
- }
Add Comment
Please, Sign In to add comment