- 传染病防治
- 2016-11-16 09:44:53 @
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstddef>
using namespace std;
int map[305][305]={-1},fa[305]={-1},num[305]={0},n,p,ans=0,notok[305]={0},vis[305]={0},deep[350],mx=0;
vector <int> son[305],depth[350];
void tran(int x,int y)
{
for(int i=1;i<=n;++i)
if(map[x][i]&&i!=y)
{
son[x].push_back(i);
deep[i]=deep[x]+1;
depth[deep[i]].push_back(i);
if(deep[i]>mx) mx=deep[i];
fa[i]=x;
tran(i,x);
}
return;
}
void pre(int x)
{
if(fa[x]==-1) return;
num[fa[x]]+=num[x];
}
inline void dfs(int x)
{
notok[x]=1;
if(!son[x].size()) return;
int mx1=0,w=0;
for(size_t i=0;i<son[x].size();++i)
if(mx1<num[son[x][i]])
{
mx1=num[son[x][i]];
w=i;
}
size_t i=0;
for(;i<son[x].size();++i) if(i!=w) break;
for(size_t j=i+1;j<son[x].size();++j)
{
if(j==w) continue;
notok[son[x][j]]=1;
for(size_t k=0;k<son[son[x][j]].size();++k)
son[son[x][i]].push_back(son[son[x][j]][k]);
}
dfs(son[x][i]);
return;
}
int main()
{
cin>>n>>p;
for(int i=1;i<=p;++i)
{
int x,y;
cin>>x>>y;
map[x][y]=map[y][x]=1;
}
deep[1]=0;
depth[0].push_back(1);
tran(1,-1);
/* for(int i=1;i<=n;++i)
{
cout<<i<<endl;
for(int j=0;j<son[i].size();++j) cout<<son[i][j]<<' ';
cout<<endl;
}
for(int i=1;i<=n;++i)
cout<<i<<' '<<deep[i]<<endl;
for(int i=0;i<=mx;++i)
{
cout<<i<<endl;
for(int j=0;j<depth[i].size();j++)
cout<<depth[i][j]<<' ';
cout<<endl;
}*/
for(int i=1;i<=n;++i) num[i]=1;
for(int d=mx;d>=0;d--)
for(int i=1;i<=n;++i)
if(deep[i]==d) pre(i);
/* for(int i=1;i<=n;++i) cout<<i<<' '<<num[i]<<endl;*/
if(son[1].size()==1)
{
printf("1\n");
return 0;
}
else
{
dfs(1);
for(int i=1;i<=n;++i) if(notok[i]) ans++;
cout<<ans<<endl;
return 0;
}
}
1 条评论
-
axx LV 8 @ 2016-11-16 09:45:17
大神帮忙看看
- 1