比赛 |
20120419s |
评测结果 |
AWWWTTTTTT |
题目名称 |
国王的遗产 |
最终得分 |
10 |
用户昵称 |
201101 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-19 11:03:04 |
显示代码纯文本
/*
UID:cheepok
PID:legacy
*/
#include<stdio.h>
#include<vector>
#include<list>
using namespace std;
struct orz
{int x,y;};
int n,k,a,b,c,s[2],Min[2];
bool flag[30001],bo;
vector <int> v[30001];
list <orz> e;
list <orz> :: iterator it,it1;
int min(int a,int b)
{
return a<b?a:b;
}
void dfs(int t,int k)
{
s[t]++;
Min[t]=min(Min[t],k);
for(int i=0;i<v[k].size();i++)
{
if(!flag[v[k][i]])
{
flag[v[k][i]]=true;
dfs(t,v[k][i]);
flag[v[k][i]]=false;
}
}
}
void dfs1(int k)
{
for(int i=0;i<v[k].size();i++)
{
if(!flag[v[k][i]])
{
flag[v[k][i]]=true;
dfs1(v[k][i]);
}
}
}
int main()
{
freopen("legacy.in","r",stdin);
freopen("legacy.out","w",stdout);
int i;
scanf("%d%d",&n,&k);
for(i=1;i<n;i++)
{
orz tmp;
scanf("%d%d",&tmp.x,&tmp.y);
v[tmp.x].push_back(tmp.y);
v[tmp.y].push_back(tmp.x);
e.push_back(tmp);
}
for(i=1;i<k;i++)
{
a=0;b=n+1;
for(it=e.begin();it!=e.end();it++)
{
s[0]=s[1]=0;
Min[0]=Min[1]=n+1;
flag[(*it).x]=true;
flag[(*it).y]=true;
dfs(0,(*it).y);
flag[(*it).x]=false;
flag[(*it).y]=false;
flag[(*it).x]=true;
flag[(*it).y]=true;
dfs(1,(*it).x);
flag[(*it).x]=false;
flag[(*it).y]=false;
if(s[0]==s[1])
{
if(s[0]>a)
{
a=s[0];
if(Min[0]<Min[1])
{
b=Min[0];
bo=true;
}
else
{
b=Min[1];
bo=false;
}
it1=it;
}
else if(s[0]==a)
{
if(Min[0]<b)
{
b=Min[0];
bo=true;
it1=it;
}
if(Min[1]<b)
{
b=Min[1];
bo=false;
it1=it;
}
}
}
else if(s[0]<s[1])
{
if(s[0]>a)
{
a=s[0];
b=Min[0];
bo=true;
it1=it;
}
else if(s[0]==a&&Min[0]<b)
{
b=Min[0];
bo=true;
it1=it;
}
}
else
{
if(s[1]>a)
{
a=s[1];
b=Min[1];
bo=false;
it1=it;
}
else if(s[1]==a&&Min[1]<b)
{
b=Min[1];
bo=false;
it1=it;
}
}
}
printf("%d ",a);
n-=a;
if(bo)
{
flag[(*it1).x]=true;
flag[(*it1).y]=true;
dfs1((*it1).y);
flag[(*it1).x]=false;
}
else
{
flag[(*it1).x]=true;
flag[(*it1).y]=true;
dfs1((*it1).x);
flag[(*it1).y]=false;
}
for(it=e.begin();it!=e.end();it++)
{
if(flag[(*it).x]||flag[(*it).y])
{
it1=it;
it++;
e.erase(it1);
}
}
}
printf("%d\n",n);
return 0;
}