码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P4212 外太空旅行

时间:2018-02-20 20:03:55      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:为什么   main   无效   不能   include   fine   memset   个数   空格   

题目描述

在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了。某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动。 可是n名同学并不是和平相处的。有的人,比如小A和小B整天狼狈为奸,是好朋友;但还有的人,比如(政治敏感)和(政治敏感)就水火不相容。这n名同学,由于是理科生,都非常的理性,所以“朋友的朋友就是朋友”和“敌人的朋友就是敌人”这两句话对这些同学无效。换句话说,有可能小A和小B是朋友,小B和小C是朋友,但是小A和小C两人势如水火。 任意两个人之间要不就是敌人,要不就是朋友。 因为在太空船上发生人员斗殴事件是很恶劣也很危险的,因此选出来参加旅行活动的同学必须互相之间都是朋友。你的任务就是确定最多可以选多少人参加旅行。

输入输出格式

输入格式:

 

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1: 
4
1 2
2 3
3 1
1 4
输出样例#1: 
3

一个很简单的转化就是把最大团变成补图的最大独立集(就是把不能共存看成边的话,选出的一定得是独立集)、、、、
然后这也不是二分图啊,,,,,,,好像是个NP问题。。。。
但是记得啥时候听说过怼np问题可以用随机化来着。。。。。然后就打了一个随机排列插入独立集,,,(为什么这样就A了hhhh)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool a[55][55],v[55];
int n,m,uu,vv;
int ans=0,p[55];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) p[i]=i;
    while(scanf("%d%d",&uu,&vv)==2) a[uu][vv]=a[vv][uu]=1;
    
    int T=50000000/n/n;
    while(T--){
        random_shuffle(p+1,p+n+1);
        
        int now=0;
        memset(v,0,sizeof(v));
        
        for(int i=1;i<=n;i++){
            if(v[p[i]]) continue;
            v[p[i]]=1;
            now++;
            
            for(int j=1;j<=n;j++) if(!a[p[i]][j]) v[j]=1; 
        }
        
        ans=max(ans,now);
    }
    
    printf("%d\n",ans);
    
    return 0;
}

  

 

洛谷 P4212 外太空旅行

标签:为什么   main   无效   不能   include   fine   memset   个数   空格   

原文地址:https://www.cnblogs.com/JYYHH/p/8455576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!