Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <vector>
- #include <stdio.h>
- using namespace std;
- bool used[200000];
- int answ[200000];
- int kolkomp = 0;
- vector<int> g[300000];
- int n;
- vector<int> comp;
- void dfs (int v)
- {
- used[v] = true;
- comp.push_back (v);
- for (size_t i=0; i<g[v].size(); ++i)
- {
- int to = g[v][i];
- if (! used[to])
- dfs (to);
- }
- }
- void find_comps()
- {
- for (int i=0; i<n; ++i)
- used[i] = false;
- for (int i=0; i<n; ++i)
- if (! used[i])
- {
- comp.clear();
- dfs (i);
- kolkomp++;
- //cout << "Component:";
- for (size_t j=0; j<comp.size(); ++j)
- {
- //kolkomp++;
- answ[comp[j]] = kolkomp;
- }//cout << ' ' << comp[j] + 1;
- //cout << endl;
- }
- }
- int main()
- {
- freopen("components.in","r",stdin);
- freopen("components.out","w",stdout);
- int m;
- scanf("%d %d\n", &n, &m);
- for(int i = 0; i < n; i++)
- used[i] = 0;
- for(int i = 0; i < m; i++)
- {
- int a, b;
- scanf("%d %d\n", &a, &b);
- if(a<=b)
- g[a - 1].push_back( b - 1);
- else
- g[b - 1].push_back( a - 1);
- }
- for(int i = 0; i < 200000; i++)
- answ[i]=0;
- find_comps();
- cout<<kolkomp<<'\n';
- for(int i = 0; i < 200000; i++)
- {
- if(answ[i]==0)
- break;
- cout<<answ[i]<<" ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement