canvas dClock
您的浏览器太古董了,升级吧!

CF 839 E-最大团

CF 839 E

Soltion:

就是怎么求最大团的问题:

以下是\(O(7000\times n^2)\)的做法

求一个最大团,然后将所有的药水平均分配,到最大团的所有点上,计算答案.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=40;
int n,k;
int G[MAXN+10][MAXN+10];
int lst[MAXN+10];
bool vis[MAXN+10];
inline int doit()
{
	int res=0;
	for(int i=1;i<=n;++i)vis[i]=false;
	for(int i=1;i<=n;++i)
	{
		bool flag=true;
		for(int j=1;j<i;++j)
		{
			if(!vis[j])continue;
			if(!G[lst[i]][lst[j]])
			{
				flag=false;
				break;
			}
		}
		if(flag){vis[i]=true;++res;}
	}
	return res;
}
int main()
{
	srand(5201314);
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			scanf("%d",&G[i][j]);
	for(int i=1;i<=n;++i)lst[i]=i;
	int sz=0;
	for(int i=1;i<=10000;++i)
	{
		random_shuffle(lst+1,lst+1+n);
		sz=max(sz,doit());
	}
	printf("%.16lf",(double)k*k/sz*(sz-1)*0.5);
	return 0;
}

事实上只要rand7000次就够啦...但我rand了10000次

posted @ 2017-09-19 20:03  DOlaBMOon  阅读(468)  评论(0编辑  收藏  举报