摘要: 题意:给出n个点的m条约束信息。每条信息表述为(P a b c)表示a在b北方距离c的位置,或者(V a b) 表示a在b北方1单位距离或者更远的位置。问是否可能存在符合以上m个要求的点。分析:根据题意首先我们可以确定已知条件是一个差分约束系统,建立此系统:p a b c:xb-xa=c 即:xb-xa>=c && xb-xa<=c -----> xa-xb<=-c && xb-xa<=cv a b:xb-xa>=1 ------> xa-xb<=-1.然后将差分约束系统转化成约束图。图单源最短路存在 ----&g 阅读全文
posted @ 2012-08-21 14:53 pushing my way 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 这个最小生成树的题比较简单,但是需要注意:Kruskal不适合稠密图中,这个题是稠密图,用kruskal800+ms,而prim400ms.还有cin和scanf的耗时差距好大啊。prim代码:View Code 1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 //454ms 5 const int maxnum=2001; 6 const int maxdigit=(1<<30); 7 int array[maxnum][maxnum]; 8 int close[max 阅读全文
posted @ 2012-08-21 08:49 pushing my way 阅读(212) 评论(0) 推荐(0) 编辑
摘要: AC自动机:一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。如果你对KMP算法和了解的话,应该知道KMP算法中的next函数(shift函数或者fail函数)是干什么用的。KMP中我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符,当A[i+1]≠B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1.. 阅读全文
posted @ 2012-08-21 08:41 pushing my way 阅读(165) 评论(0) 推荐(0) 编辑