3632: 外太空旅行

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 389  Solved: 129
[Submit][Status]

Description

在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了。某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动。

是n名同学并不是和平相处的。有的人,比如小A和小B整天狼狈为奸,是好朋友;但还有的人,比如杜鲁门和赫鲁晓夫就水火不相容。这n名同学,由于是理科
生,都非常的理性,所以“朋友的朋友就是朋友”和“敌人的朋友就是敌人”这两句话对这些同学无效。换句话说,有可能小A和小B是朋友,小B和小C是朋友,
但是小A和小C两人势如水火。
任意两个人之间要不就是敌人,要不就是朋友。
因为在太空船上发生人员斗殴事件是很恶劣也很危险的,因此选出来参加旅行活动的同学必须互相之间都是朋友。你的任务就是确定最多可以选多少人参加旅行。
 

Input

第一行一个整数n(1<=n<=50)。所有的同学按照1~n编号。
接下来若干行,每行两个用空格隔开的整数a, b(1<=a,b<=n),表示a和b是朋友。
注意:如果一个数对(x,y)(或者(y,x))没有在文件中出现,那么编号为x和y的两个同学就是敌人。
 

Output

仅仅一个数,即最多可以选多少人参加活动。
 

Sample Input

4
1 2
2 3
3 1
1 4

Sample Output

3
说明:选编号为1,2,3的同学参加,他们互相都是朋友。

HINT

Source

最大团在考试的时候用随机化+贪心正确性还是很高的,而且能轻而易举拓展到n=200及以上。

而DFS算法则可以看做是dfs优化的经典题目。

算法传送门:http://www.cnblogs.com/zhj5chengfeng/archive/2013/07/29/3224092.html

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 102
#define MAXM 100000
int e[][MAXM][];
int map[MAXN][MAXN];
int q[MAXN],topq;
int next[MAXN];
int n,m;
int work()
{
topq=;
q[]=;
int i,j;
bool flag;
for (i=;i<n;i++)
{
flag=true;
for (j=;j<=topq;j++)
{
if (!map[i][q[j]])
{
flag=false;break;
}
}
if (flag)
{
q[++topq]=i;
}
}
return topq+;
}
int main()
{
freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
scanf("%d",&n);
int i,j,k;
int x,y,z;
i=;
while (~scanf("%d%d",&e[][i][],&e[][i][]))
{
e[][i][]--;
e[][i][]--;
if (map[e[][i][]][e[][i][]])continue;
m++;
i++;
}
int ans=;
int cnt=;
while (cnt++<)
{
memset(map,,sizeof(map));
for (i=;i<m;i++)
{
map[e[cnt&][i][]][e[cnt&][i][]]=map[e[cnt&][i][]][e[cnt&][i][]]=true;
}
ans=max(ans,work());
for (i=;i<n;i++)
next[i]=i;
for (i=;i<n;i++)
{
x=rand()%n;
y=rand()%n;
swap(next[x],next[y]);
}
for (i=;i<m;i++)
{
for (j=;j<;j++)
{
e[cnt&^][i][j]=next[e[cnt&][i][j]];
}
}
}
printf("%d\n",ans);
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 102
#define MAXM 100000
int e[MAXM][];
int map[MAXN][MAXN];
int n,m;
int s[MAXN][MAXN];
int tops[MAXN];
int l[MAXN],topl=-;
int ans=;
int rec[MAXN];
int dfs(int lev)
{
int i,j;
int x;
if (lev>ans)
{
ans=lev;
return ;
}
if (lev+tops[lev]+<=ans)return ;
for (i=;i<=tops[lev];i++)
{
x=s[lev][i];
tops[lev+]=-;
if (i<tops[lev]&&lev++rec[s[lev][i+]]<=ans)return ;
for (j=i;j<=tops[lev];j++)
{
if (map[x][s[lev][j]])s[lev+][++tops[lev+]]=s[lev][j];
}
l[lev]=x;
if (dfs(lev+))return ;
}
return ;
}
int main()
{
freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
scanf("%d",&n);
int i,j,k;
int x,y,z;
i=;
while (~scanf("%d%d",&e[i][],&e[i][]))
{
e[i][]--;
e[i][]--;
m++;
i++;
}
int cnt=;
memset(map,,sizeof(map));
for (i=;i<m;i++)
{
map[e[i][]][e[i][]]=map[e[i][]][e[i][]]=true;
}
for (i=n-;i>=;i--)
{
for (j=i;j<n;j++)
s[][j-i]=j;
tops[]=n-i-;
dfs();
rec[i]=ans;
// cout<<i<<endl;
}
printf("%d\n",ans);
}

bzoj 3632: 外太空旅行 最大团的更多相关文章

  1. BZOJ 3632 外太空旅行(最大团)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3632 [题目大意] 求图中的最大团. [题解] 最大团问题是npc问题,因此可以考虑随 ...

  2. BZOJ3632:外太空旅行(最大团,DFS)

    Description 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的 ...

  3. 洛谷 P4212 外太空旅行

    题目描述 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的.有的人,比如 ...

  4. BZOJ3632: 外太空旅行

    BZOJ1547: 周末晚会 https://lydsy.com/JudgeOnline/problem.php?id=1547 分析: 对于一个串旋转若干次会回到本身,旋转次数即是同构个数,这个东西 ...

  5. 想要见识外太空?一款VR头显就能帮你实现梦想

    除了宇航员,我们中的大多数人一生都没有机会前往地球之外的宇宙空间,只能在图片和纪录片中感受浩瀚宇宙的震撼. 美国肯尼迪航天中心和BrandVR合作推出的VR头显 而NASA在VR中的投资,创造的新的V ...

  6. BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)

    [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...

  7. BZOJ(4) 1050: [HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3984  Solved: 2236[Submit][St ...

  8. BZOJ 1690 奶牛的旅行

    分数规划. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...

  9. BZOJ 1923 外星千足虫(高斯消元)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1923 题意:有n个数字,m次测试.每个数字为0或者1.每次测试选出一些数字出来把他们加起 ...

随机推荐

  1. C++ Virtual介绍 分类: C/C++ 2015-06-16 21:36 26人阅读 评论(0) 收藏

    参考链接:http://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.html 学过C++的人都知道在类Base中加了Virtual关键字的函 ...

  2. Activiti5.16.4数据库表结构

    一.ACTIVITI 数据库E-R图(5.16.4) Activiti 5.16.4 总共有24张表,增加act_evt_log(事件日志),以及增加了对SasS的支持. 在流程定义.运行实例和历史的 ...

  3. 字符串匹配算法-BM

    在用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广泛的一种算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法.比我们学习的KMP算 ...

  4. 打开PPT 提示安装,非要取消才能显示PPT

    自从安装VS2008后,一打开ppt文件,就开始了配置VS2008的过程. 配置完了,下回也还提示安装. 解决方案: PowerPoint选项->加载项->Chinese Translat ...

  5. hdu2026.java字符

    首字母变大写 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. 项目打包 weblogic部署

    工作流打包:   由于没有集成单点,配置文件要修改 将webnocas.xml内容复制覆盖 web.xml   到这里修改完毕 选择weblogic项目,右键maven install,生成.ear文 ...

  7. JS判断是否是移动设备进行http链接重定向

    1.问题: 用户使用手机移动设备访问127.0.0.1/yemian,自动识别到手机端并且跳转至127.0.0.1/m/yemian 2.小二,上代码: //判断是否是移动设备 var ua = na ...

  8. 【jQuery】用jQuery给文本框添加只读属性【readOnly】

    <input id="id" type="text" /> jQuery( $("#ID").attr({ readonly: ...

  9. 覆盖(override)和重载(overload)

    覆盖(override)重写和 重载(overload) 继承,重写--->多态   我懂了,你懂吗 ,不看看文章 java 子类重写父类的方法应注意的问题 Java多态性理解

  10. C# DateTime显示时间格式的使用

    代码DateTime.ToString() Patterns All the patterns: 0 MM/dd/yyyy 08/22/2006 1 dddd, dd MMMM yyyy Tuesda ...