题目:

Sample Input

5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1

Sample Output

6

题意:

  我们选数,每个数只能选一次。给定n个条件[ai,bi]和ci,表示区间[ai,bi]中至少选ci个数,问一共最少选多少个数。

分析:

  设xi为小于等于i的数中选了多少个数。对于条件[ai,bi]、ci,我们有bi-ai-1>=ci,是差分约束系统,可以用最短路求解。

  另外,题目中有比较隐蔽的条件:每个数只能选一个,一个数选的次数也不能为负,那么就是说对于相邻的两个数x、y,有0<=y-x<=1,要根据这个条件建边才能保证答案无误。

  最后输出Xmx-Xmn。(差分约束系统要不无解,要不有无数解,因为一旦有解只要保证他们之间差值不变即可。题目问一共最少选多少个数,而xi的最小值为0,所以答案为Xmx-Xmn)

代码如下:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 using namespace std;
 8 #define Maxn 50010
 9 #define INF 0xfffffff
10
11 struct node
12 {
13     int x,y,c,next;
14 }t[Maxn*4];int len=0;
15
16 int first[Maxn],cnt[Maxn],dis[Maxn];
17 bool bq[Maxn],inq[Maxn];
18
19 int mymin(int x,int y) {return x<y?x:y;}
20 int mymax(int x,int y) {return x>y?x:y;}
21
22 void ins(int x,int y,int c)
23 {
24     t[++len].x=x;t[len].y=y;t[len].c=c;
25     t[len].next=first[x];first[x]=len;
26 }
27
28 queue<int > q;
29
30 void spfa(int s)
31 {
32     memset(dis,63,sizeof(dis));
33     memset(inq,0,sizeof(inq));
34     memset(cnt,0,sizeof(cnt));
35     if(!q.empty()) q.pop();
36     dis[s]=0;inq[s]=1;q.push(s);
37     while(!q.empty())
38     {
39         int x=q.front();q.pop();inq[x]=0;
40         for(int i=first[x];i;i=t[i].next)
41         {
42             int y=t[i].y;
43             if(dis[y]>dis[x]+t[i].c)
44             {
45                 dis[y]=dis[x]+t[i].c;
46                 if(!inq[y])
47                 {
48                     q.push(y);
49                     inq[y]=1;
50                 }
51             }
52         }
53     }
54 }
55
56 int main()
57 {
58     int m,mx=0,mn=INF;
59     scanf("%d",&m);
60     memset(first,0,sizeof(first));
61     memset(bq,0,sizeof(bq));
62     for(int i=1;i<=m;i++)
63     {
64         int x,y,c;
65         scanf("%d%d%d",&x,&y,&c);x++;y++;
66         ins(y,x-1,-c);
67         bq[x]=bq[y]=1;
68         mx=mymax(mx,y);mn=mymin(mn,x-1);
69     }
70     for(int i=mn;i<mx;i++) ins(i+1,i,0);
71     for(int i=mn;i<mx;i++) ins(i,i+1,1);
72     for(int i=mn;i<=mx;i++) ins(mx+1,i,0);
73     spfa(mx+1);
74     //for(int i=mn;i<=mx;i++) printf("%d %d\n",i,dis[i]);
75     printf("%d\n",dis[mx]-dis[mn]);
76     return 0;
77 }

[POJ1201]

感觉自己考虑问题总是不全面啊。

2016-04-10 16:31:30

转载于:https://www.cnblogs.com/Konjakmoyu/p/5374459.html

【POJ1021】Intervals (最短路解差分约束)相关推荐

  1. POJ1201/ZOJ1508/HDU1384 Intervals(spfa解差分约束问题)

    题意是说给出一些闭区间,这些区间上整点可以选择放一个元素或者不放,但是每个区间都有一个下限,就是说你在这个区间里面的元素个数不能低于这个下限值. 最后要求出最少需要几个元素才能满足每个区间的要求. 建 ...

  2. 【UVA11478】Halum (最短路解差分约束)

    题目: Sample Input 2 1 1 2 10 2 1 1 2 -10 3 3 1 2 4 2 3 2 3 1 5 4 5 2 3 4 4 2 5 3 4 2 3 1 0 1 2 -1 Sam ...

  3. POJ3169 Layout , 最短路算法解差分约束问题

    POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...

  4. POJ - 3169 SPFA解差分约束除了有解,负环还有另一种情况

    题意就是有N头牛排成一个直线..有些牛之间互相讨厌..距离必须大于等于某个...有些牛之间相互暧昧..距离必须小于等于某个...牛的前后顺序和编号是一样的...问这些牛最多能排多长.. 比较传统的SP ...

  5. 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1​,...,Xn​ ...

  6. UVA 11478 Halum(用bellman-ford解差分约束)

    对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...

  7. 谈SPFA解差分约束最大值最小值的原理...

    自我分析,为什么用SPFA解差分方程,用最短路径求差分方程的最大解:用最长路径求差分方程的最小解. 如果给出的是一组: a2 - a1 <= k1 a3 - a1 <= k2 .... 之 ...

  8. CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0​,a1​,...,an​,经过计算相邻的数的平均值得到b0,b1, ...

  9. 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534

    一个很好的差分约束总结:http://972169909-qq-com.iteye.com/blog/1185527 第一:  感觉难点在于建图  第二:  ①:对于差分不等式,a - b <= ...

最新文章

  1. maven打包记录1
  2. 谈一谈使用Python入门量化投资
  3. 计算机考研最后四十天,2021考研最后四十天冲刺复习攻略
  4. 【计算机网络(微课版)】第2章 物理层 课后习题及答案
  5. Matlab | MATLAB编辑器:无法使用GBK编码保存文件,请改用UTF-8编码保存文件(问题解决)
  6. Android注解学习(2)
  7. 洛谷——P1478 陶陶摘苹果(升级版)
  8. 2005年3月9日笔记
  9. asp.net处理get,post数据
  10. 微软推出 Power Platform 漏洞奖励计划
  11. verilog 简单module_verilog简易教程
  12. 计算机系统的基础必备软件,电脑必装软件推荐:基础篇——够用就行
  13. 你也可以找到好工作(二)
  14. 9_python笔记-函数
  15. #Paper Reading# Efficient Heterogeneous Collaborative Filtering without NS for Recommendation
  16. 1.centos7 安装murmur
  17. nodejs __dirname 与 process.cwd(); 的区别
  18. Unity* 原生 X86 支持使Square Enix的Hitman GO*卓尔不凡
  19. oracle启动监听程序报错:本地计算机上的oracleOraDB11g_home1TNSListener服务启动后停止某些服务在未由其他服务或程序使用时将自动停止
  20. 爱因斯坦的超级问题(谁养鱼)SQL解法

热门文章

  1. 【微信小程序】图片选择、转码、压缩、预览、上传,file与base64
  2. 解决Error: Assertion failed (chunk.m_size <= 0xFFFF)和Set OPENCV_ENABLE_NONFREE CMake option问题
  3. 【ABAQUS2022】ABAQUS2022安装+汉化+帮助文档下载教程
  4. GLTF格式学习:glTF介绍( 基于WebGL
  5. 网络攻防实验:defcon2015 r0pbab
  6. 车载网络测试 - 车载以太网 - ARP详细解析
  7. 详讲全排列算法,及解决数字搭积木问题
  8. 【HTML】Angular JS + Table 根据数据动态合并单元格
  9. IDEA中maven项目的language level 修改后自动重置问题
  10. 发那科机器人没有码垛指令_FANUC 机器人码垛编程详细讲解