摘要: 題意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1。2.总人数为奇数。3.有仇恨的骑士不能挨着坐。问有几个骑士不能和任何人形成任何的圆圈。分析:双连通分支。建图方法是将没有矛盾的骑士连边,求双连通分量(关于点的)。对于每个双连通分量,看是否存在奇环,若存在那么这个双连通分量中的任意两骑士都可以同时出现在一个奇环里。原因如下:因为每个不在那个奇环里的点都一定能找到两条连到奇环上不同节点的路径,然后奇环被分割为一个总数为奇数的节点串和一个总数为偶数的节点串,这时做出正确的选出和那一串构成环即可形成奇环。那么如何判断一个双连通分量是否存在奇环呢?用交 阅读全文
posted @ 2012-11-04 16:40 undefined2024 阅读(2318) 评论(0) 推荐(0)
摘要: 把所有串全排列,每次排列按顺序从左到右将各串叠加起来,叠加过程遵循最短原则。search(f, f+n, g, g+m);在f中查找g,返回第一个与g完全匹配的起始位置,若无法匹配则返回f+m。copy(f,f+n,g);将f中的n个元素拷贝到g中。View Code #include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define maxn 10#define 阅读全文
posted @ 2012-11-04 15:59 undefined2024 阅读(216) 评论(0) 推荐(0)