Cod sursa(job #1869311)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 5 februarie 2017 18:49:18
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream fin("statiuni.in");
ofstream fout("statiuni.out");
vector <int> vec[100001];
queue <int> q;
int viz[100001],lg[100001],start[100001];
int main()
{
    int n,k,i,x,y,nrs=0;
    fin>>n>>k;
    for(i=1;i<n;i++)
    {
        fin>>x>>y;
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    for(i=1;i<=n;i++)
        if(vec[i].size()==1)
            {
                q.push(i);
                lg[i]=0;
                viz[i]=1;start[i]=i;
            }
    while(!q.empty())
    {
        x=q.front();q.pop();
        for(i=0;i<vec[x].size();i++)
        {
            if(viz[vec[x][i]]<=1&&lg[x]+1<=k && vec[x][i]!=start[x])
            {
                viz[vec[x][i]]++;
                if(start[vec[x][i]]!=0)
                    start[vec[x][i]]=0;
                else
                    start[vec[x][i]]=start[x];
                lg[vec[x][i]]=lg[x]+1;
                if(viz[vec[x][i]]==2)
                    nrs++;
                q.push(vec[x][i]);
            }
        }
    }
    fout<<nrs;
    return 0;
}