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. [Javascript] MetaProgramming: new.target

    new.target is a new “magical” value available in all functions, thoughin normal functions it will al ...

  2. 第一个Xcode项目 - 代码修改布局约束

    第一行的选中效果已经有了,那第二行的选中效果怎么做呢?我这里选择改变布局约束来实现选中效果 [我有个用object-c做APP的同事他说,我觉得这个应该去获取色块的位置,然后赋给选中用的View,然后 ...

  3. 通过strace 监控 fdatasync

    通过strace 监控 Redis AOF文件的系统调用 Redis中主要的AOF设置 「appendonly yes」 开启每次更新操作后进行日志记录 「appendfilename appendo ...

  4. dell笔记本通过uefi+gpt模式安装win10系统

    安装前,需要确认dell笔记本是否支持uefi 1.使用UltraISO制作硬盘镜像后,过程如下 1) 选择"文件"->"打开",如下 2) 在打开的对话 ...

  5. oracle合并查询

    1). Union 该操作符用于取得两个结果集的并集.当使用该操作符时,会自动去掉结果集中重复行. 2).union all 该操作符与union相似,但是它不会取消重复行,而且不会排序. 3). I ...

  6. Angular2 - Starter - Component and Component Lifecircle Hooks

    我们通过一个NgModule来启动一个ng app,NgModule通过bootstrap配置来指定应用的入口组件. @NgModule({ bootstrap: [ AppComponent ], ...

  7. ADO.Net技术

    Connection对象 1.连接数据库 通过SqlConnection对象的State属性判断数据库的连接状态: public override ConnectionState State{ get ...

  8. Linq扩展方法之All 、Any

    // Summary: // 确定序列中的所有元素是否满足条件. // Parameters: // source:包含要应用谓词的元素的 System.Collections.Generic.IEn ...

  9. 常见sql语句及复杂sql语句记录

    1 将A表中的部分字段和B表中的部分字段作为C表的字段 SELECT a.name,b.age   FROM  (SELECT * from A) as a,(SELECT * from B) as ...

  10. Centos6.5 安装 MariaDB-10.0.20-linux-x86_64.tar.gz

    下载mariadb :https://downloads.mariadb.org/  我选择mariadb-10.0.20-linux-x86_64.tar.gz这个版本 复制安装文件 /opt 目录 ...