求助TLE on 1,10
查看原帖
求助TLE on 1,10
233815
zhjzhmh楼主2022/9/3 16:28
#include<bits/stdc++.h>
using namespace std;
int n,p,a[310][310],c[310][310],b[310],deep[310][310],mx,mn=0x3f3f3f3f,cnt[310],x,y;
int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){ if(ch=='-') f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
int put(int k,int p)
{
	b[k]=p;
	for(int i=1;i<=c[k][0];i++) put(c[k][i],p);
}
void dfs(int k,int Dep)
{
	deep[Dep][++deep[Dep][0]]=k;mx=max(mx,Dep);
	for(int i=1;i<=a[k][0];i++) if(!b[a[k][i]]) b[a[k][i]]=1,c[k][++c[k][0]]=a[k][i],dfs(a[k][i],Dep+1);
}
int Dfs(int k)
{
	cnt[k]=1;
	for(int i=1;i<=a[k][0];i++) if(!b[a[k][i]]) b[a[k][i]]=1,cnt[k]+=Dfs(a[k][i]);
	return cnt[k];
}
void DFS(int k,int now)
{
	if(k>mx) {mn=min(mn,now);return;}
	int p=0;
	for(int i=1;i<=deep[k][deep[k][0]];i++)
	  if(!b[deep[k][i]]) put(deep[k][i],1),DFS(k+1,now-cnt[deep[k][i]]),put(deep[k][i],0);
		else p++;
	if(p==deep[k][0]) {mn=min(mn,now);return;}
}
int main()
{
	n=read();p=read();
	for(int i=1;i<=p;i++)
	{
		x=read();y=read();
		a[x][++a[x][0]]=y;
		a[y][++a[y][0]]=x;
	}
	b[1]=1;
	dfs(1,1);
	memset(b,0,sizeof(b));b[1]=1;
	Dfs(1);
	memset(b,0,sizeof(b));b[1]=1;
	DFS(2,n);
	cout<<mn;
	return 0;
}

RT

2022/9/3 16:28
加载中...