摘要: 以“爪”形为单元,问所给出的无向图中能否被完全分割成一个个单元。分析图的性质,由于已知每个点的度是3,所以“爪”之间是相互交错的,即把一个“爪”分为中心点和边缘点,中心点被完全占据,而边缘点被三个“爪”瓜分。分析到这里,用二分图的性质就可以解决了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=333; 8 9 int color[MAXN];10 vectorG[MAXN];11 queueq;12 13 bool Bjudge()14 {15 memse... 阅读全文
posted @ 2013-08-06 22:32 Thousand Sunny 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 2-sat问题,一种在两种可能性中选择必然关系的问题。推荐两篇论文,也是学2-sat公认比较好的材料。前者较好理解,后者需耐心看。http://www.google.com.hk/url?sa=t&rct=j&q=2-sat&source=web&cd=6&ved=0CEUQFjAF&url=http%3a%2f%2fbbs%2ebyr%2ecn%2fwForum%2fboardcon%2ephp%3fbid%3d212%26id%3d15887%26ftype%3d3%26ap%3d369&ei=30wAUsrlDYLHkwXam4Go 阅读全文
posted @ 2013-08-06 09:45 Thousand Sunny 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 求最大团。和等价性证明有类似之处,只不过这个不是求互推,而是只要a->b,或b->a即可。同样的,容易想到先缩点,得到DAG,每个节点上保存SCC的点数,相信任意一条由根节点(入度为零)出发的路径中权值和最大的即为所求,dp即可解决。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=1111; 8 const int MAXM=55555; 9 10 struct Edge{ 11 int v,next; 12 }edge[MAXM]; 13... 阅读全文
posted @ 2013-08-06 09:04 Thousand Sunny 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件。容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG。要推出一个方案,YY后取“出度为零”和“入度为零”的点数的较大值。理由:假定出度为零的点数较多,即是我们通常意义上的树的形式(当然,DAG是图,这里只是类比)。根可以推出其所有子孙,事实上任意一个点都可以推出其子孙,那么只要让该节点推出树根,就可以推出整棵树上所有的节点了。那么多棵树为什么不是相乘呢?,借题目中的范例,a->b,b->c,c->a,形成一个循环即可。本质:给定一个有 阅读全文
posted @ 2013-08-06 08:45 Thousand Sunny 阅读(254) 评论(0) 推荐(0) 编辑