Pagini recente » Cod sursa (job #1634687) | Cod sursa (job #1543439) | Cod sursa (job #468312) | Cod sursa (job #300279) | Cod sursa (job #2259422)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream f("dfs.in");
ofstream g("dfs.out");
deque <int> q;
int n,m;
int v[2][200001];
bool a[100001];
int main()
{
int x,i,numar=0,start=2;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>v[0][i]>>v[1][i];
}
q.push_back(v[0][1]);
q.push_back(v[1][1]);
v[0][1]=v[1][1]=0;
a[v[0][1]]=a[v[1][1]]=true;
while(!q.empty())
{
x=q.front();
for(i=start;i<=m;i++)
{
if(v[0][i]==x)
{
if(a[v[1][i]]==false)
{q.push_back(v[1][i]);
a[v[1][i]]=true;}
v[0][i]=v[1][i]=0;
}
if(v[1][i]==x)
{
if(a[v[0][i]]==false)
{
a[v[0][i]]=true;
q.push_back(v[1][i]);
}
v[0][i]=v[1][i]=0;
}
}
q.pop_front();
if(q.empty())
{
numar++;
i=1;
while(v[0][i]==0&&i<=m)
i++;
if(i<=m)
{
q.push_back(v[0][i]);
q.push_back(v[1][i]);
v[0][i]=v[1][i]=0;start=i+1;
}
}
}
for(i=1;i<=n;i++)
if(a[i]==true)
numar++;
g<<numar;
return 0;
}