当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题


ZOJ2770-Burn the Linked Camp

//差分约束方程组-转换为最短路问题
//d[v] <= d[u] + dis[u][v] -> d[v] - d[u] <= dis[u][v]
//Time:110Ms Memory:12116
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; #define MAXN 1005
#define INF 0x3f3f3f3f struct Edge {
int u, v, w;
Edge(){}
Edge(int uu,int vv,int ww):u(uu),v(vv),w(ww){}
}e[MAXN*MAXN]; int n, m, le;
int sd[MAXN]; //从1-i兵营总共最多多少人
int d[MAXN]; bool bellmanford(int x)
{
memset(d, INF, sizeof(d));
d[x] = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < le; j++)
{
int u = e[j].u, v = e[j].v;
int w = e[j].w;
if (d[v] > d[u] + w)
d[v] = d[u] + w;
}
}
for (int i = 0; i < le; i++)
if (d[e[i].v] > d[e[i].u] + e[i].w)
return false;
return true;
} int main()
{
//freopen("in.txt", "r", stdin);
while (scanf("%d%d", &n, &m) != EOF)
{
int a, b, w;
le = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &sd[i]);
sd[i] += sd[i - 1];
e[le++] = Edge(i, i - 1, 0);
e[le++] = Edge(i - 1, i, sd[i] - sd[i-1]);
}
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d", &a, &b, &w);
e[le++] = Edge(b, a - 1, -w);
//e[le++] = Edge(a - 1, b, sd[b] - sd[a - 1]);
}
if (!bellmanford(n)) printf("Bad Estimations\n");
else printf("%d\n", -d[0]);
}
return 0;
}

POJ1201_Intervals

//差分约束系统-SPFA
//求一个集合Z中最少有多少个数
//给定Z与n个区间的最小交集个数
//Time:407Ms Memory:2624K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; #define MAX 50005
#define INF 0x3f3f3f3f struct Edge {
int u, w, next;
Edge(){}
Edge(int uu,int ww,int nn):u(uu),w(ww),next(nn){}
}e[3*MAX]; int l, r, m, le;
int h[MAX];
int d[MAX];
bool v[MAX]; void spfa(int x)
{
memset(d, INF, sizeof(d));
memset(v, false, sizeof(v));
d[x] = 0;
queue<int> q;
q.push(x); v[x] = true;
while (!q.empty()) {
int cur = q.front();
q.pop(); v[cur] = false;
for (int i = h[cur]; i != -1; i = e[i].next)
{
int u = e[i].u, w = e[i].w;
if (d[u] > d[cur] + w) {
d[u] = d[cur] + w;
if (!v[u]) {
v[u] = true; q.push(u);
}
}
}
}
} int main()
{
memset(h, -1, sizeof(h));
scanf("%d", &m);
l = INF; r = 0;
for (int i = 1; i <= m; i++)
{
int a, b, w;
scanf("%d%d%d", &a, &b, &w);
r = max(b, r);
l = min(a, l);
e[le] = Edge(a - 1, -w, h[b]);
h[b] = le++;
}
for (int i = l; i <= r; i++)
{
e[le] = Edge(i - 1, 0, h[i]);
h[i] = le++;
e[le] = Edge(i, 1, h[i - 1]);
h[i - 1] = le++;
} spfa(r); printf("%d\n", d[r] - d[l-1]); return 0;
}

ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)的更多相关文章

  1. ACM/ICPC 之 Floyd范例两道(POJ2570-POJ2263)

    两道以Floyd算法为解法的范例,第二题如果数据量较大,须采用其他解法 POJ2570-Fiber Network //经典的传递闭包问题,由于只有26个公司可以采用二进制存储 //Time:141M ...

  2. ACM/ICPC 之 SPFA范例两道(POJ3268-POJ3259)

    两道以SPFA算法求解的最短路问题,比较水,第二题需要掌握如何判断负权值回路. POJ3268-Silver Cow Party //计算正逆最短路径之和的最大值 //Time:32Ms Memory ...

  3. ACM/ICPC 之 SPFA练习两道(ZOJ3088-ZOJ3103)

    两道题都需要进行双向SPFA,比范例复杂,代码也较长,其中第二题应该可以用DFS或者BFS做,如果用DFS可能需要的剪枝较多. ZOJ3088-Easter Holydays //利用SPFA找出下降 ...

  4. 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester

    这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...

  5. ACM/ICPC 之 欧拉回路两道(POJ1300-POJ1386)

    两道有关欧拉回路的例题 POJ1300-Door Man //判定是否存在从某点到0点的欧拉回路 //Time:0Ms Memory:116K #include<iostream> #in ...

  6. ACM/ICPC 之 两道dijkstra练习题(ZOJ1053(POJ1122)-ZOJ1053)

    两道较为典型的单源最短路径问题,采用dijkstra解法 本来是四道练习题,后来发现后面两道用dijkstra来解的话总觉得有点冗余了,因此暂且分成三篇博客(本篇以及后两篇). ZOJ1053(POJ ...

  7. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  8. POJ1201 Intervals(差分约束系统)

    与ZOJ2770一个建模方式,前缀和当作点. 对于每个区间[a,b]有这么个条件,Sa-Sb-1>=c,然后我就那样连边WA了好几次. 后来偷看数据才想到这题还有两个隐藏的约束条件. 这题前缀和 ...

  9. ACM - ICPC World Finals 2013 C Surely You Congest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...

随机推荐

  1. Storm集群安装部署步骤【详细版】

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...

  2. linux下的chm阅读器?

    pre和code标签是可以同时使用的, 通常pre放在code的前面. 由于 code, pre中不能使用 换行, 段落, 和 尖括号标签, 所以, 对于尖括号, 要换成 html的 实体符号 < ...

  3. JDBC:从数据库中取数据的一个bug

    先看错误信息: java.sql.SQLException: Before start of result set at com.mysql.jdbc.SQLError.createSQLExcept ...

  4. RTX二次开发(一)(基于ASP.NET)

    腾讯通RTX是(Real Time eXpert)是腾讯公司推出的企业级实时通信平台,致力于帮助企业提高运作效率.降低沟通成本.拓展商业机会,是一种高度可管理.低成本.易部署的IT平台.RTX集成了丰 ...

  5. 【干货理解】理解javascript中实现MVC的原理

    理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...

  6. 江湖救急:webbrowser中js文件丢失问题~

    页面中,有一个按钮,点击按钮通过js create 了一个 script标签 ,链接加载一个外部js文件,执行该js文件 $("#a").click(function(){ $.g ...

  7. 编写更好的C#代码

    引言 开发人员总是喜欢就编码规范进行争论,但更重要的是如何能够在项目中自始至终地遵循编码规范,以保证项目代码的一致性.并且团队中的所有人都需要明确编码规范所起到的作用.在这篇文章中,我会介绍一些在我多 ...

  8. 【Solr】索引库查询界面详解

    目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...

  9. iOS:使用MVC模式帮ViewController瘦身

    如何给UIViewController瘦身 随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码行数急剧增多,达到了2,3千行,甚至更多.这时如果想再添加一点功能或者 ...

  10. 使用基于关系的选择器和伪类选择器创建纯CSS无JavaScript的鼠标移动到上面即可显示的下拉菜单

    html代码: <div class="menu-bar"> <ul> <li> <h3 class="text-warning ...