Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define N 1000001
- using namespace std;
- vector <int> nod[N];
- deque <int> coada;
- int n,viz[N],nrc;
- ifstream f("unire.in");
- ofstream g("unire.out");
- int BFS(int Nod)
- {
- int x,NodMin=n+1;
- coada.push_back(Nod);
- if(Nod<NodMin)
- NodMin=Nod;
- viz[Nod]=nrc;
- while(!coada.empty())
- {
- x=coada.front();
- coada.pop_front();
- for(unsigned int i=0;i<nod[x].size();++i)
- if(!viz[nod[x][i]])
- {
- if(nod[x][i]<NodMin)
- NodMin=nod[x][i];
- coada.push_back(nod[x][i]),viz[nod[x][i]]=nrc;
- }
- }
- return NodMin;
- }
- int main()
- {
- int m,c;
- f>>n>>m>>c;
- int x,y;
- while(m--)
- f>>x>>y,nod[x].push_back(y),nod[y].push_back(x);
- int NodMin;
- unsigned long long int sol=0;
- for(int i=1;i<=n;++i)
- if(!viz[i])
- {
- ++nrc,NodMin=BFS(i);
- if(NodMin!=1)
- sol+=NodMin+1;
- }
- if(c==1)
- g<<--nrc;
- else
- g<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement