摘要: 题意:给定一个棋盘,如果在某一个点放置棋子,那么这个棋子出现的行和列都不够有其他的棋子,除非他们之间有墙相隔。现在给定一个含有墙的和空地的棋盘,问最多能够放置多少棋子。解法:将所有为"."的点保存起来,如果两个点不在同一行且不在同一列,那么在两个点之间连一条边,否则判定两点之间是否有墙相隔,有的话连边,否则不连,最后求一个最大团即可。代码如下:#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;i 阅读全文
posted @ 2013-04-02 22:37 沐阳 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个邻接矩阵,求最大团。解法:直接AC。代码如下:#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;int N, mp[55][55];int ret, st[55], cnt[55];void dfs(int x, int num) { int flag; for (int i = x+1; i < N; ++i) { if (!mp[x][i] 阅读全文
posted @ 2013-04-02 21:05 沐阳 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个图,现在要给这个图上色,要求相邻的元素不能够涂上同样的颜色,一共只有两种颜色,黑色和白色。问给定的图最多能够涂上黑色点。解法:从相邻的点不能够涂上相同的颜色我们可以得出该题的实质就是要求一个最大的点独立集,而求一个图的点独立集如果所给的图是一棵树的话,就可以通过拆点转化为二分图来解了,由于给定的图很可能成环,因此化作二分图的做法在这里不再适应。另一个对应的问题就是通过对原图建一个反图,然后对反图做一个最大团的求解,最大团保证了是反图中的最大完全子集,任何两个元素之间都有边相连,反应在原图中则是任意两两之间不存在边,也就是两两不相邻,这刚好契合的题意。这是一个最简单的球最大团的版本 阅读全文
posted @ 2013-04-02 15:04 沐阳 阅读(697) 评论(0) 推荐(0) 编辑