记录编号 182914 评测结果 AAAAAAAAAA
题目名称 [NOIP 2003]传染病控制 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 0.284 s
提交时间 2015-08-29 11:40:47 内存使用 4.14 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000+10;
int tim[maxn],n,ans=1e6,num;
int v[maxn][maxn];
bool f[maxn][maxn];

void Deleteedge(int x){
	int pos,now;
	for (int i=1;i<=v[x][0];++i){
		now=v[x][i];
		for (int j=1;j<=v[now][0];++j)
		   if (v[now][j]==x){
				v[now][j]=v[now][v[now][0]];
				v[now][0]--; Deleteedge(now);
				break;
		   }
	}
}

void ss(int x){
	bool F=0;if (num>=ans) return ;
	for (int i=1;i<=n;++i)
	   if (tim[i]==x){
		  for (int j=1;j<=v[i][0];++j) {
			 num++; F=1;
			 tim[v[i][j]]=x+1;
		  }
	   }
	num--;
	for (int i=1;i<=n;++i)
	   if (tim[i]==x+1) {tim[i]=0;ss(x+1);tim[i]=x+1;}
	num++;
	for (int i=1;i<=n;++i) if (tim[i]==x+1){num--;tim[i]=0;}
	if (!F) ans=min(ans,num);
}

int main()
{
	freopen("epidemic.in","r",stdin);
	freopen("epidemic.out","w",stdout);
	int x,y,p;
	scanf("%d %d",&n,&p); 
	for (int i=1;i<=p;++i){
		scanf("%d %d",&x,&y);
		v[x][++v[x][0]]=y;
		v[y][++v[y][0]]=x;
	}
	memset(tim,0,sizeof(tim));
	Deleteedge(1);num=1;
	tim[1]=1;//!!!!!!!!!!!
	ss(1);
	printf("%d",ans);
	return 0;
}