https://www.luogu.org/problem/show?pid=1260

题目描述

造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000)。由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是很容易确定的(但这些起始时间都是非负整数,因为它们必须在整个工程开始后启动)。例如:挖掘完成后,紧接着就要打地基;但是混凝土浇筑完成后,却要等待一段时间再去掉模板。

这种要求就可以用M(5≤m≤5000)个不等式表示,不等式形如Ti-Tj≤b代表i和j的起始时间必须满足的条件。每个不等式的右边都是一个常数b,这些常数可能不相同,但是它们都在区间(-100,100)内。

你的任务就是写一个程序,给定像上面那样的不等式,找出一种可能的起始时间序列T1,T2,…,Tn,或者判断问题无解。对于有解的情况,要使最早进行的那个任务和整个工程的起始时间相同,也就是说,T1,T2,…,Tn中至少有一个为0。

输入输出格式

输入格式:

第一行是用空格隔开的两个正整数n和m,下面的m行每行有三个用空格隔开的整数i,j,b对应着不等式Ti-Tj≤b。

输出格式:

如果有可行的方案,那么输出N行,每行都有一个非负整数且至少有一个为0,按顺序表示每个任务的起始时间。如果没有可行的方案,就输出信息“NO SOLUTION”。

输入输出样例

输入样例#1:

  1. 5 8
  2. 1 2 0
  3. 1 5 1
  4. 2 5 1
  5. 3 1 5
  6. 4 1 4
  7. 4 3 1
  8. 5 3 1
  9. 5 4 3
输出样例#1:

  1. 0
  2. 2
  3. 5
  4. 4
  5. 1
输入样例#2:

  1. 5 5
  2. 1 2 3
  3. 1 5 1
  4. 2 5 1
  5. 5 1 5
  6. 4 1 4
输出样例#2:

  1. NO SOLUTION

说明

由@zhouyonglong提供SPJ

差分约束、现学现做。。。

SPFA松弛:

  1. #include <cstring>
  2. #include <cstdio>
  3. #include <queue>
  4.  
  5. const int N();
  6. int n,m,sumedge,head[N];
  7. struct Edge
  8. {
  9. int v,w,next;
  10. Edge(int v=,int next=,int w=):
  11. v(v),next(next),w(w){}
  12. }edge[];
  13. inline void ins(int u,int v,int w)
  14. {
  15. edge[++sumedge]=Edge(v,head[u],w);
  16. head[u]=sumedge;
  17. }
  18.  
  19. int dis[N];
  20. bool vis[N];
  21. bool SPFA(int u)
  22. {
  23. vis[u]=;
  24. for(int v,i=head[u];i;i=edge[i].next)
  25. {
  26. v=edge[i].v;
  27. if(dis[v]>dis[u]+edge[i].w)
  28. {
  29. dis[v]=dis[u]+edge[i].w;
  30. if(!vis[v])
  31. {
  32. if(!SPFA(v)) return ;
  33. }
  34. else return ;
  35. }
  36. }
  37. vis[u]=;
  38. return ;
  39. }
  40.  
  41. #define min(a,b) (a<b?a:b)
  42. int AC()
  43. {
  44. scanf("%d%d",&n,&m);
  45. for(int u,v,w,i=;i<=m;i++)
  46. scanf("%d%d%d",&u,&v,&w),ins(v,u,w);
  47. for(int i=;i<=n;i++) ins(,i,);
  48. memset(dis,/,sizeof(dis)); dis[]=;
  49. if(!SPFA())
  50. {
  51. printf("NO SOLUTION");
  52. return ;
  53. }
  54. int lose=0x7fffffff;
  55. for(int i=;i<=n;i++) lose=min(lose,dis[i]);
  56. for(int i=;i<=n;i++) printf("%d\n",dis[i]-lose);
  57. }
  58.  
  59. int Hope=AC();
  60. int main(){;}

暴力松弛

  1. #include <cstdio>
  2.  
  3. int n,m,dis[];
  4. struct Edge
  5. {
  6. int u,v,w;
  7. }road[];
  8.  
  9. #define min(a,b) (a<b?a:b)
  10. int AC()
  11. {
  12. scanf("%d%d",&n,&m);
  13. for(int u,v,w,i=;i<=m;i++)
  14. scanf("%d%d%d",&road[i].v,&road[i].u,&road[i].w);
  15. for(int i=;i<n;i++)
  16. for(int j=;j<=m;j++)
  17. dis[road[j].v]=min(dis[road[j].v],dis[road[j].u]+road[j].w);
  18. for(int i=;i<=m;i++)
  19. if(dis[road[i].v]>dis[road[i].u]+road[i].w)
  20. {
  21. printf("NO SOLUTION");
  22. return ;
  23. }
  24. int lose=0x7fffffff;
  25. for(int i=;i<=n;i++) lose=min(lose,dis[i]);
  26. for(int i=;i<=n;i++) printf("%d\n",dis[i]-lose);
  27. return ;
  28. }
  29.  
  30. int Hope=AC();
  31. int main(){;}

洛谷—— P1260 工程规划的更多相关文章

  1. 洛谷 P1260 工程规划(差分约束)

    题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...

  2. 2021.08.16 P1260 工程规划(差分约束)

    2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...

  3. luogu P1260 工程规划(luogu wa)don't know way

    题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...

  4. luogu P1260 工程规划

    题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...

  5. 1002-过河卒-洛谷-luogu-动态规划dp

    题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒 ...

  6. P1260 工程规划 (差分约束)

    题目链接 Solution 差分约束. 差分约束似乎精髓就两句话: 当我们把不等式整理成 \(d[a]+w<=d[b]\) 时,我们求最长路. 整理成 \(d[a]+w>=d[b]\) 时 ...

  7. 洛谷2543AHOI2005]航线规划 (树剖+线段树+割边思路)

    这个题的思路还是比较巧妙的. 首先,我们发现操作只有删除和询问两种,而删除并不好维护连通性和割边之类的信息. 所以我们不妨像WC2006水管局长那样,将询问离线,然后把操作转化成加边和询问. 然后,我 ...

  8. 分数规划模板(洛谷P4377 [USACO18OPEN]Talent Show)(分数规划,二分答案,背包)

    分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限 ...

  9. 【POJ3621】【洛谷2868】Sightseeing Cows(分数规划)

    [POJ3621][洛谷2868]Sightseeing Cows(分数规划) 题面 Vjudge 洛谷 大意: 在有向图图中选出一个环,使得这个环的点权\(/\)边权最大 题解 分数规划 二分答案之 ...

随机推荐

  1. js/jquery 判断支持touchstart

      if ('ontouchstart' in document.documentElement) { //... }

  2. 快速排序、查第k大

    参考这里,提到两种方法,并说第二种好: http://www.cnblogs.com/qsort/archive/2011/05/09/2041653.html qsort的每一趟中,选定pivot以 ...

  3. 屌丝、小白怎么拿国内巨头offer

    不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕仰慕.看看这些牛人,NOI金牌.开源社区名人,三年级開始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...

  4. 刚接触Joomla,写一下瞎折腾的初感受~

    我这几天一直在苦苦寻找一款能够长期投靠的CMS产品,要求的是 1)必须支持命名空间 2)必须OOP + MVC分层 3)丰富分文档和使用群体,至少是出名的.免得哪一天他们解散了 4)-- 一開始我把目 ...

  5. TLS握手

    http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1 ...

  6. Java中的作用域有哪些

    在Java语言中,变量的类型主要有3种:成员变量.静态变量和局部变量 首先说静态变量跟局部变量 静态变量不依赖于特定的实例,而是被所有实例共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配 ...

  7. Hessian Spirng实例

    Spring实例 之前,我们做了很简单的纯Hessian的调用,虽然到此已经能够满足远程调用的需求了,但是我听说spring也能够访问hessian的远程服务,研究了一番,废话不多说,直接上示例. 业 ...

  8. BZOJ 3238 后缀数组+单调栈

    单调栈跑两遍求出来 ht[i]为最小值的那段区间 //By SiriusRen #include <cstdio> #include <cstring> #include &l ...

  9. redis的持久化功能

    基于快照持久化 修改配置文件,开始基于快照的选项 [root@localhostbin]#vim /etc/redis/redis.conf stop-writes-on-bgsave-error y ...

  10. Edge 通过代理无法打开网页,解决方案

    netsh winhttp import proxy source=ie