随笔分类 -  差分约束系统

摘要:http://poj.org/problem?id=2983题意:给出M条信息,判断这些信息的正确性。(1)V A B :表示A,B之间的距离>=1; (2)P A B X :表示A B之间的距离为x。思路:dis[i]表示i到原点的距离,由(1)知 dis[A]A之间有一条边,权值为-1;由(2)知: dis[A]B的权值为-x,B->A的权值为x。增加一个超级源点,与所有的点相连且权值为0.建图,spfa判断是否有负环(即判断进站次数,若大于点数则存在负环)。若存在负环则信息为假,否则为真。 1 #include 2 #include 3 #include 4 using na 阅读全文
posted @ 2014-02-20 21:28 N_ll 阅读(328) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1201题意:给定n个整数闭区间[a,b]和n个整数c,求一个最小的整数集合Z,满足Z里边的数中范围在闭区间[a,b]的个数不小于c个。思路:根据题目描述,可建模成一个差分约束系统。设S[i]表示小于等于i的整数的个数,R表示最大的右端点值,L表示最小的左端点值:则 S[b] - S[a-1] >= c;转化成:S[a-1] - S[b] = 0;转化成:S[i-1] - S[i] = M,即 S[L-1] - S[R] 2 #include 3 const int N=50005; 4 const int INF=1 dis[u]+e 阅读全文
posted @ 2013-11-24 14:07 N_ll 阅读(238) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1364题意:输入i,n,gt(lt),k; 判断是否存在这样一个序列,从第 i 项加到第 n+i 项的和 (gt) k.思路: 由题意知gt: Sn+i - Si > k;.......(1)lt: Si - Sn+i 建图。 1 #include 2 #include 3 const int N=120; 4 const int INF=1 dis[u]+edge[j].w)//更新各点到源点的距离30 dis[v] = dis[u]+edge[j].w;31 }32 }33 ... 阅读全文
posted @ 2013-11-24 11:51 N_ll 阅读(172) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3159思路:用O(V+ElogV)的Dijkstra算法求1到n的最短路。即用优先队列优化Dijkstra算法。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=300005; 6 const int maxm=150002; 7 struct node 8 { 9 int u,v,w;10 int next;11 } edge[maxm];12 struct pot13 {14 int v,w;15 p... 阅读全文
posted @ 2013-11-22 19:30 N_ll 阅读(243) 评论(0) 推荐(0)