最大团模版

こ雲淡風輕ζ 提交于 2020-03-01 08:33:40

O(3m3)复杂度O(3^{\frac{m}{3}})

int n,m; //m为节点个数
int mpp[50][50];
int st[50][50];
int mans=0;
int dp[50]; //dp[i] 表示为i到m的节点中最大团的节点数
map<string,int> mp;

void dfs(int stp,int num){
	if(!num){
		if(stp>mans){
			mans=stp;	
		}
		return;
	}
	for(int i=0;i<num;++i){
		if(stp+n-st[stp][i]-1<=mans) break;
		if(stp+dp[st[stp][i]]<=mans) break;
		int tmp=0;
		for(int j=i+1;j<num;++j){
			if(mpp[st[stp][i]][st[stp][j]]){
				st[stp+1][tmp++]=st[stp][j];
			}
		}
		dfs(stp+1,tmp);
	}
}	

void solve(){
	int cnt=0;
	for(int i=m-1;i>=0;--i){
		cnt=0;
		for(int j=i+1;j<m;++j){
			if(mpp[i][j]){
				st[1][cnt++]=j;
			}
		}
		dfs(1,cnt);
		dp[i]=mans;
	}
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!