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. [TypeScript ] What Happens to Compiled Interfaces

    This lesson covers using your first TypeScript Interface and what happens to the Interface when it i ...

  2. Linux模式设计系列( 内核与应用关联思考)

    http://blog.chinaunix.net/uid/20608849/cid-25333-list-2.html

  3. hdu2044java递推

    一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  4. Java基础知识强化之IO流笔记35:InputStreamReader(Reader字符流的子类)2种read数据方式

    1. InputStreamReader(Reader字符流的子类)2种read数据方式: InputStreamReader的read方法: int read():一次读取一个字符 int read ...

  5. 指针做MAP的KEY的TEST

    用struct做map的key会需要"operator <"等等,还会出现奇怪的问题可能. 试了下用指针做key,看看效果: #include <iostream> ...

  6. jsp获取服务端的访问信息

    获取服务端访问信息 public static String getUrl(HttpServletRequest request){ String url = ""; if(req ...

  7. HTML+CSS基础学习笔记(1)

    一.了解HTML.CSS.JS 1.HTML是网页内容的载体. 内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2.CSS样式是表现. 用来改变内容外观的东西称之为表现 ...

  8. CEO、COO、CFO、CTO

    CEO.COO.CFO.CTO是什么意思? 网站里的各种职位: CEO(Chief executive officer)首席执行官 类似总经理.总裁,是企业的法人代表. COO(Chief opera ...

  9. 重温sql语句中的join操作

    1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,RIGHT,一个表或视图也可以可以和它自身做JOIN操 ...

  10. 收集统计信息让SQL走正确的执行计划

    数据库环境:SQL SERVER 2005 今天在生产库里抓到一条跑得慢的SQL,语句不是很复杂,返回的数据才有800多行, 却执行了34分钟,甚至更久. 先看一下执行结果 我贴一下SQL. SELE ...