poj1364
题目大意:现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}
其中ai=a*si,其实这句可以忽略不看
现在给出一个不等式,使得ai+a(i+1)+a(i+2)+...+a(i+n)<ki或者是ai+a(i+1)+a(i+2)+...+a(i+n)>ki
首先给出两个数分别代表S序列有多少个,有多少个不等式
不等式可以这样描述
给出四个参数第一个数i可以代表序列的第几项,然后给出n,这样前面两个数就可以描述为ai+a(i+1)+...a(i+n),即从i到n的连续和,再给出一个符号和一个ki
当符号为gt代表‘>’,符号为lt代表‘<'
那么样例可以表示
1 2 gt 0
a1+a2+a3>0
2 2 lt 2
a2+a3+a4<2
最后问你所有不等式是否都满足条件,若满足输出lamentable kingdom,不满足输出successful conspiracy,这里要注意了,不要搞反了
要注意的一点是差分约束系统的条件是 小于等于。因此样例可以得到如下不等式
s3-s0<0 ---- s3-s0<=-1 (si 表示a1+a2+..ai)
#include<iostream> #include<queue> using namespace std; #define MAXSIZE 150 #define INF 9999999 struct node{ int u; int v; int c; }; struct node edges[MAXSIZE]; int head[MAXSIZE]; int next[MAXSIZE]; int vis[MAXSIZE]; int dis[MAXSIZE]; int num; int n,m; int c[MAXSIZE]; queue<int>que; void addnode(int u,int v,int c) { edges[num].u=u; edges[num].v=v; edges[num].c=c; next[num]=head[u]; head[u]=num++; } int spfa(int s) { int i; while(!que.empty()) { que.pop(); } memset(vis,0,sizeof(vis)); memset(c,0,sizeof(c)); for(i=0;i<=n;i++) dis[i]=INF; dis[s]=0; vis[s]=1; c[s]++; que.push(s); while(!que.empty()) { int from=que.front(); que.pop(); vis[from]=0; for(i=head[from];i!=-1;i=next[i]) { int to=edges[i].v; if(dis[to]>dis[from]+edges[i].c) { dis[to]=dis[from]+edges[i].c; c[to]++; if(c[to]>=n+1) { return 0; } if(!vis[to]) { vis[to]=1; que.push(to); } } } } return 1; } int main() { //freopen("in.txt","r",stdin); while(1) { scanf("%d",&n); if(!n) break; scanf("%d",&m); memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); num=0; while(m--) { int a,b,k; char s[10]; scanf("%d%d%s%d",&a,&b,s,&k); int s1=a-1; int s2=a+b; if(s[0]=='g')//> { addnode(s2,s1,-k-1);//这里是-(k-1) } else { addnode(s1,s2,k-1); } } int flag=1; for(int i=0;i<=n;i++) if(!spfa(i)) { flag=0; break; } if(!flag) printf("successful conspiracy\n"); else printf("lamentable kingdom\n"); } return 0; }
poj2983
#include<iostream> #include<queue> using namespace std; #define EMAX 201010 #define NMAX 1010 #define INF 900000 #define MIN(x,y) (((x)<(y))?(x):(y)) #define MAX(x,y) (((x)>(y))?(x):(y)) int s,e; int n,m; int num; queue<int>que; struct node { int u; int v; int c; }; node edge[EMAX]; int head[EMAX]; int next[EMAX]; int vis[NMAX]; int cans[NMAX]; int dis[NMAX]; void addnode(int u,int v,int c) { edge[num].u=u; edge[num].v=v; edge[num].c=c; next[num]=head[u]; head[u]=num++; } int spfa(int start) { int i; while(!que.empty()) { que.pop(); } memset(vis,0,sizeof(vis)); memset(cans,0,sizeof(cans)); for(i=s;i<e+1;i++) { dis[i]=INF; } dis[start]=0; vis[start]=1; que.push(start); cans[start]++; while(!que.empty()) { int from=que.front(); que.pop(); vis[from]=0; for(i=head[from];i!=-1;i=next[i]) { int to=edge[i].v; if(dis[to]>dis[from]+edge[i].c) { dis[to]=dis[from]+edge[i].c; if(!vis[to]) { vis[to]=1; que.push(to); cans[to]++; if(cans[to]>n) return 0; } } } } return 1; } int main() { // freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF) { memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); num=0; s=INF; e=-INF; while(m--) { char ct; int a,b,c; //scanf("%c",&ct); cin>>ct; if(ct=='P') { scanf("%d%d%d",&a,&b,&c); addnode(a,b,c); addnode(b,a,-c); s=MIN(s,a); e=MAX(e,b); } if(ct=='V') { scanf("%d%d",&a,&b); addnode(b,a,-1); s=MIN(s,a); e=MAX(e,b); } } for (int i =1; i <= n; i++) addnode(0, i, 0); int flag=1; if(!spfa(0)) flag=0; if(flag) printf("Reliable\n"); else printf("Unreliable\n"); } return 0; } /* 差分约束系统,对于bellman和spfa来说,解差分的不同在于, 对于不连通图bellman能直接处理,而spfa不能, 需要加入超级源(一个到所有点都有一条长度为0的边的点), 并把超级源作为起点,才能保证在扩展过程中到达每个点。 (也可从每个点调用一次spfa来判断是否存在负权环,但这里此题会超时) 否则差分约束系统的部分内容就不会被检测到。 当然也不是所有题遇到这种不连通的情况都可以使用超级源。 因为这种超级源相当于把不同的连通分支在数轴上的起点都平移到了原点。 如题目有特殊要求,则可以对不同的连通分支分别做单独处理。 */
相关推荐
北京大学在线编程平台上的POJ2983题目——"Is the Information Reliable",是一道涉及差分约束系统(Differential Constraint System)与优化版Bellman算法的典型问题。在本文中,我们将深入探讨这两个概念,并结合...
- **定义**:建立和求解差分约束系统。 - **示例题目**: - poj1201 - poj2983 - **应用场景**:适用于资源分配、任务调度等问题。 **4. 最小费用最大流** - **定义**:在图中找到费用最小的最大流。 - **示例...
- 差分约束系统:如`poj1201, poj2983`。 - 最小费用最大流:如`poj2516, poj2195`。 - **数据结构** - 线段树:如`poj2528, poj2828`。 - RMQ(区间查询):如`poj3264, poj3368`。 - 并查集的高级应用:如`...
1. "POJ1716-Integer Intervals【Difference Constraints】.cpp":这可能是基于差分约束系统理论的C++代码实现,它可能采用了动态规划或者线性规划的方法来解决问题。 2. "POJ1716-Integer Intervals【Greed】.cpp...
【差分约束系统】是一种用于解决一系列线性不等式约束问题的模型,常用于最优化问题,如求解最短路径、最长路径或者判断是否存在满足条件的解。在这个模型中,我们通常需要将问题转化为寻找图中的最短路径或最长路径...
- **知识点**:差分约束系统,一种特殊类型的线性不等式系统,常用于优化问题。 #### 1236 *Network of Schools - 强连通 - **知识点**:强连通分量算法,如Kosaraju算法或Tarjan算法,用于找出图中的强连通分量。...
* 差分约束系统的建立和求解:例如 poj1201、poj2983。 * 最小费用最大流:例如 poj2516、poj2516、poj2195。 * 双连通分量:例如 poj2942。 * 强连通分支及其缩点:例如 poj2186。 * 图的割边和割点:例如 poj...
- **图算法**:深入学习差分约束系统、最小费用最大流、双连通分量等。 - **数据结构**:掌握线段树、静态二叉检索树、树状数组等高级数据结构。 - **搜索**:进一步学习最优化剪枝和可持久化数据结构。 通过...
在初级阶段的基础上,中级阶段涵盖了更多复杂的数据结构和算法,如差分约束系统、最小费用最大流、双连通分量、强连通分支、最小割模型等,以及线段树、树状数组、RMQ查询等高级数据结构的应用。这些内容进一步深化...
- **注意事项**: 理解差分约束系统的构建和求解方法。 **2. 最小费用最大流** - **定义**: 在流量网络中寻找成本最低的最大流。 - **应用场景**: 资源分配问题。 - **示例题目**: POJ 2516, POJ 2195 - **注意...
3. **图算法的深化**:如差分约束系统、最小费用最大流、双连通分量、强连通分支及其缩点、图的割边和割点、最小割模型等。poj1201、poj2983等涉及这些高级图算法。 4. **高级数据结构**:如线段树、平衡树(Treap、...
3. **差分约束系统**:建立和求解线性约束问题,如POJ1201和2983。 4. **最小费用最大流**:在考虑费用的情况下寻找最大流,如POJ2516、2195。 5. **双连通分量**:图的结构分析,如POJ2942。 6. **强连通分支和缩点...
### 百练POJ题目分类知识点详解 #### 主流算法概览 1. **搜索与回溯** - 搜索算法通常用于解决决策问题,在所有可能的解决方案中找到最佳或满意的结果。 - 回溯法是搜索的一种,主要用于解决约束满足问题。它...
* 差分约束系统的建立和求解 + poj1201, poj2983 * 最小费用最大流 + poj2516, poj2516, poj2195 * 双连通分量 + poj2942 * 强连通分支及其缩点 + poj2186 * 图的割边和割点 + poj3352 * 最小割模型、网络流...
- **高级数据结构**:例如线段树、树状数组、差分约束系统等。 - **字符串算法**:包括后缀数组、AC自动机等。 - **组合优化**:涉及组合优化问题的求解方法。 - **数学建模**:学习如何将实际问题转化为数学模型...
(3) 差分约束系统的建立和求解:poj1201, poj2983 (4) 最小费用最大流:poj2516, poj2516, poj2195 (5) 双连通分量:poj2942 (6) 图的割边和割点:poj3352 七、数学 本部分涵盖了数学,包括组合数学、数论和计算...
* 差分约束系统的建立和求解:差分约束系统是指用于解决图的约束问题的算法。例题:poj1201、poj2983。 * 最小费用最大流:最小费用最大流是指在流量网络中寻找最小费用最大流的算法。例题:poj2516、poj2516、poj...
6. 差分约束系统 7. Hash表 图论 1. 网络流问题 2. 最小费用流 3. 图的路径问题(0/1边权最短路径、非负边权最短路径) 4. Euler Path/Tour 5. Hamilton Path/Tour 6. 构造生成树问题 7. 最小生成树、第k小生成树...
- poj1201: 涉及差分约束系统的建立和求解。 ##### 2. 最小费用最大流 - **定义**: 最小费用最大流是在最大流的基础上考虑最小化总成本。 - **应用场景**: 常用于网络流问题、资源分配问题等。 - **示例题目**: -...
3. **差分约束系统**(如poj1195, poj3321):解决变量间的关系约束问题,适用于资源分配、时间表编排等领域。 4. **RMQ(Range Minimum Query)**(如poj3264, poj3368):快速查询区间内的最小值,适用于数据压缩...