Pagini recente » Cod sursa (job #580649) | Cod sursa (job #251375) | Cod sursa (job #1598612) | Cod sursa (job #1375987) | Cod sursa (job #2777811)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("salvare.in");
ofstream g ("salvare.out");
int n,k;
int dp[10005];
vector <int> v[10005];
int rez;
void dfs(int nod , int tata , int dist )
{
int vecini=0;
for(int x=0;x<v[nod].size();++x)
{
if(v[nod][x]!=tata)
{
int fiu=v[nod][x];
if(dp[nod]+1>dist)
{
dp[fiu]=0;
++rez;
dfs(fiu,nod,dist);
}
else
{
dp[fiu]=dp[nod]+1;
dfs(fiu,nod,dist);
}
++vecini;
}
}
}
int ok(int dist)
{
rez=0;
for(int i=1;i<=n;++i)
dp[i]=0;
dfs(1 , 0 , dist);
if(rez>k)
return 0;
return 1;
}
int main()
{
f>>n>>k;
for(int i=1;i<=n;++i)
{
int x , y;
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
int st=1;
int dr=n;
int mij=(st+dr)/2;
while(st<=dr)
{
int lejereanu=ok(mij);
if(lejereanu==1 && ok(mij-1)==0)
{
g<<mij<<"\n";
break;
}
if(ok(mij)==0)
st=mij+1;
else
dr=mij-1;
mij=(st+dr)/2;
}
ok(mij);
for(int i=1;i<=n;++i)
if(dp[i]==0)
g<<i<<" ";
return 0;
}