讨论 / 请人告诉我哪里错了
hws_sheng 2009-10-29 07:04:00
点我顶贴 收藏 删除
#include<iostream>

using namespace std;

int Map[302][302],len[303];

int N,ans,a[302];

void Tree(int x)

{

if (!a[x]) {

len[x]=1;//记录i为顶点有多小个孩子

return;

}

for (int i=1;i<=a[x];i++){

Tree(Map[x][i]);

len[x]+=len[Map[x][i]];

}

len[x]++;

}

void Chear(int x)

{

if (!a[x]) return;

int maxn=len[Map[x][1]],p=1;

for (int i=2;i<=a[x];i++)

if (len[Map[x][i]]>maxn){

maxn=len[Map[x][i]];

p=i;

}

ans-=maxn;

for (int i=1;i<=a[x];i++)

if (i!=p)

Chear(Map[x][i]);

}

int main()

{

int c;

cin>>N>>c;

memset(a,0,sizeof(a));

memset(len,0,sizeof(len));

for (int i=1;i<=c;i++){

int x,y;cin>>x>>y;

Map[x][++a[x]]=y;

}

Tree(1);

ans=len[1];

Chear(1);

cout<<ans<<endl;

return 0;

}

#1 hws_sheng@2009-10-08 01:32:00
回复 删除
解决了

找人叫声 送分

#2 chensqi@2009-10-27 23:31:00
回复 删除
怎么解决的?
#3 飞雪天涯@2009-10-29 07:04:00
回复 删除
送给我吧!

#include<fstream>

#include<iostream>

#include<climits>

#define debug

#undef debug

using namespace std;

#define fin cin

#define fout cout

#define MAXN 300

//ifstream fin ("epidemic.in");

//ofstream fout ("epidemic.out");

int n,p,m,x,y,t;

int a[MAXN+1],b[MAXN+1],c[MAXN+1];

void solve(int x,int y){

if(y>=m) return;

if(x==t) m=y;

else{

int j=0;

for (int i=1;i<=n;++i)

if (a[i]>0&&c[i]==x+1){

b[i]=b[a[i]];

if(b[i]==1)++j;

}

--j;

for (int i=1;i<=n;++i)

if (a[i]>0&&c[i]==x+1&&b[i]==1){

b[i]=2;

solve(x+1,y+j);

b[i]=1;

}

solve(x+1,y+j+1);

}

}

int main (void){

bool fixeddd;

memset(a,0,sizeof(a));

memset(b,0,sizeof(b));

fin>>n>>p;

b[1]=1;

for (int i=1;i<=p;++i){

fin>>x>>y;

if (b[x]==0&&b[y]==0){

a[x]=y;

a[y]=x;

}

else{

if (b[x]==1){

a[y]=x;

b[y]=1;

}

else if (b[y]==1){

a[x]=y;

b[x]=1;

}

do{

fixeddd=true;

for (int j=1;j<=n;++j)

if (a[j]>0&&b[j]==0&&b[a[j]]==1){

fixeddd=false;

b[j]=1;

break;

}

}while (!fixeddd);

}

}

memset(c,0,sizeof(c));

c[1]=1;

t=0;

do{

fixeddd=true;

++t;

for (int j=1;j<=n;++j)

if (a[j]>0&&c[a[j]]==t){

fixeddd=false;

c[j]=t+1;

}

}while(!fixeddd);

m=INT_MAX;

memset(b,0,sizeof(b));

b[1]=1;

solve(1,1);

fout<<m<<endl;

#ifdef debug

while(1);

#endif

return 0;

}

查看更多回复
提交回复