「BZOJ3632」外太空旅行
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
1 2
2 3
3 1
1 4
Sample Output
3
说明:选编号为1,2,3的同学参加,他们互相都是朋友。
说明:选编号为1,2,3的同学参加,他们互相都是朋友。
题解
wulala说这是蒙特卡罗。。。
好像很有道理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define inf 0x7fffffff #define ll long long using namespace std; inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,b[55],ans; bool a[55][55],del[55]; void getans() { memset(del,0,sizeof(del)); int t=0; for(int i=1;i<=n;i++) if(!del[i]) { t++; for(int j=i+1;j<=n;j++) if(!a[b[i]][b[j]])del[j]=1; } ans=max(t,ans); } int main() { scanf("%d",&n); int x,y; while(1) { x=read();y=read(); break; a[x][y]=a[y][x]=1; } for(int i=1;i<=n;i++)b[i]=i; for(int i=1;i<=10000;i++) { for(int j=1;j<=n;j++) swap(b[j],b[rand()%j+1]); getans(); } printf("%d",ans); return 0; } |
我偷偷用您的代码交了一发,WA了呀。
[…] http://hzwer.com/3480.html n只有50啊,是不是很心动呢? 其实我们真的只是暴力就好了; 我们发现2^50次方是存的下的; 那么直接状压搜索就好了,蛮好; 然后加一个估价函数; 对于位运算的坑爹,就不多说了,反正加括号就是了; […]
随机化的正确概率是怎么算的QAQ
经验0。0
耶耶黄学长换歌单了WW
最小割做怎么样
没法做吧
最大团和二分图最大独立集有什么差别?
求神犇科普这是什么做法。。。
我是爆搜的..
说白了就是随机+贪心