随笔分类 - 雁过留痕
摘要:2-sat。又学到了一种使用的方法:当确定选择某中状态A时,从它的对立状态A^1引一条边add(A^1,A),从而使凡是dfs经过对立状态,必然return false;即保证若存在一种可能性,必然是经过该状态A的。题意:m个人对n个方案投票,每人之多投4票,是否存在一种方案使每个人所投的一半以上的票被采纳。依次输出每个议题最终的结果。1、注意是一半以上,我一开始理解成一半,结果无法根据必然性建边。 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=555; 8 9 stru...
阅读全文
摘要:2-sat。不错的一道题,学到了不少。需要注意这么几点:1、题目中描述的是有n对夫妇,其中(n-1)对是来为余下的一对办婚礼的,所以新娘只有一位。2、2-sat问题是根据必然性建边,比如说A与B二选一,那么当不选A时,必然选B。在本题中,我们所能确定的必然性只有一种:当一对通奸者中的一个人出现在新娘的对面时,另一个必须在新娘的同侧。一开始,我每次建的是两条边,即由新娘指向对面的一人,再从这个人,指向与新娘同侧的另一人(语言描述较困难,但我尽量简明的表达出来)。这是一种假设,因为新娘既可能在左边,又可能在右边。但是这不是必然性:“新娘指向对面的一个人”,这条边不存在必然关系。 解决办法:我们假.
阅读全文
摘要:这道题在LA是挂掉了,不过还好,zoj上也有这道题。题意:好大一颗树,询问父子关系。。考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE。安心啦,这肯定是一道正常人能做的题目。不过是需要几个小技巧。1、2000w个点不一定都要保存下来,事实上,虽然题目给了256M的空间,只要开了两个这么大的数组,MLE是跑不了的,所以只保存30w个父节点。2、如果这30w个父节点构成一条链,dfs的栈肯定爆。所以需要用栈模拟dfs。这里用的是stack,当然手写栈会更快。注意:1、时间戳的使用。 2、本题中顺序对节点标号,使得所有>=n的节点都是叶子节点,同时能够二分也
阅读全文
摘要: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
阅读全文
摘要:明显的欧拉回路,把颜色作为点,建图后,做一遍欧拉回路。不过我是现学的,打印路径上纠结了一下,发现随着FindEuler()的递归调用的结束,不断把点压入栈中,从后向前打印,遇到"支路"会先处理好支路再继续的。这样就可以顺序打印路径了。如果是直接打印或放在队列里,会发现打印出来的项链的关系正好相反,即前一行的第一个与本行的第二个颜色相同。邻接表又开小了,MAXN 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=55; 8 const int MAXM=1111; 9 10 i
阅读全文

浙公网安备 33010602011771号