Pagini recente » Cod sursa (job #924617) | Cod sursa (job #782663) | Cod sursa (job #1894279) | Cod sursa (job #2327602) | Cod sursa (job #1754612)
#include<iostream>
#include<list>
#include<queue>
#include<algorithm>
using namespace std;
int n,m;
list<int> a[100001];
list<int> nodes;
int viz[100001];
queue<int> q;
int main(){
freopen("dfs.in", "r", stdin);
freopen("dfs.out", "w", stdout);
int n1,n2;
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d",&n1,&n2);
a[n1].push_back(n2);
a[n2].push_back(n1);
}
for(int i=1;i<=n;i++){
if(a[i].size()!=0)
nodes.push_back(i);
}
q.push(1);
int c=n-nodes.size();
while(q.size()!=0){
int p=q.front();
q.pop();
if(!viz[p]){
nodes.remove(p);
viz[p]=1;
for(list<int>::iterator it=a[p].begin();it!=a[p].end();){
q.push(*it);
a[*it].remove(p);
a[p].erase(it++);
}
}
if(q.size()==0){
c++;
if(nodes.size()!=0)q.push(*next(nodes.begin(),0));
}
}
printf("%d",c);
}