洛谷—— P1260 工程规划
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”。
输入输出样例
- 5 8
- 1 2 0
- 1 5 –1
- 2 5 1
- 3 1 5
- 4 1 4
- 4 3 –1
- 5 3 –1
- 5 4 –3
- 0
- 2
- 5
- 4
- 1
- 5 5
- 1 2 –3
- 1 5 –1
- 2 5 –1
- 5 1 –5
- 4 1 4
- NO SOLUTION
说明
由@zhouyonglong提供SPJ
差分约束、现学现做。。。
SPFA松弛:
- #include <cstring>
- #include <cstdio>
- #include <queue>
- const int N();
- int n,m,sumedge,head[N];
- struct Edge
- {
- int v,w,next;
- Edge(int v=,int next=,int w=):
- v(v),next(next),w(w){}
- }edge[];
- inline void ins(int u,int v,int w)
- {
- edge[++sumedge]=Edge(v,head[u],w);
- head[u]=sumedge;
- }
- int dis[N];
- bool vis[N];
- bool SPFA(int u)
- {
- vis[u]=;
- for(int v,i=head[u];i;i=edge[i].next)
- {
- v=edge[i].v;
- if(dis[v]>dis[u]+edge[i].w)
- {
- dis[v]=dis[u]+edge[i].w;
- if(!vis[v])
- {
- if(!SPFA(v)) return ;
- }
- else return ;
- }
- }
- vis[u]=;
- return ;
- }
- #define min(a,b) (a<b?a:b)
- int AC()
- {
- scanf("%d%d",&n,&m);
- for(int u,v,w,i=;i<=m;i++)
- scanf("%d%d%d",&u,&v,&w),ins(v,u,w);
- for(int i=;i<=n;i++) ins(,i,);
- memset(dis,/,sizeof(dis)); dis[]=;
- if(!SPFA())
- {
- printf("NO SOLUTION");
- return ;
- }
- int lose=0x7fffffff;
- for(int i=;i<=n;i++) lose=min(lose,dis[i]);
- for(int i=;i<=n;i++) printf("%d\n",dis[i]-lose);
- }
- int Hope=AC();
- int main(){;}
暴力松弛
- #include <cstdio>
- int n,m,dis[];
- struct Edge
- {
- int u,v,w;
- }road[];
- #define min(a,b) (a<b?a:b)
- int AC()
- {
- scanf("%d%d",&n,&m);
- for(int u,v,w,i=;i<=m;i++)
- scanf("%d%d%d",&road[i].v,&road[i].u,&road[i].w);
- for(int i=;i<n;i++)
- for(int j=;j<=m;j++)
- dis[road[j].v]=min(dis[road[j].v],dis[road[j].u]+road[j].w);
- for(int i=;i<=m;i++)
- if(dis[road[i].v]>dis[road[i].u]+road[i].w)
- {
- printf("NO SOLUTION");
- return ;
- }
- int lose=0x7fffffff;
- for(int i=;i<=n;i++) lose=min(lose,dis[i]);
- for(int i=;i<=n;i++) printf("%d\n",dis[i]-lose);
- return ;
- }
- int Hope=AC();
- int main(){;}
洛谷—— P1260 工程规划的更多相关文章
- 洛谷 P1260 工程规划(差分约束)
题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...
- 2021.08.16 P1260 工程规划(差分约束)
2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...
- luogu P1260 工程规划(luogu wa)don't know way
题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...
- luogu P1260 工程规划
题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...
- 1002-过河卒-洛谷-luogu-动态规划dp
题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒 ...
- P1260 工程规划 (差分约束)
题目链接 Solution 差分约束. 差分约束似乎精髓就两句话: 当我们把不等式整理成 \(d[a]+w<=d[b]\) 时,我们求最长路. 整理成 \(d[a]+w>=d[b]\) 时 ...
- 洛谷2543AHOI2005]航线规划 (树剖+线段树+割边思路)
这个题的思路还是比较巧妙的. 首先,我们发现操作只有删除和询问两种,而删除并不好维护连通性和割边之类的信息. 所以我们不妨像WC2006水管局长那样,将询问离线,然后把操作转化成加边和询问. 然后,我 ...
- 分数规划模板(洛谷P4377 [USACO18OPEN]Talent Show)(分数规划,二分答案,背包)
分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限 ...
- 【POJ3621】【洛谷2868】Sightseeing Cows(分数规划)
[POJ3621][洛谷2868]Sightseeing Cows(分数规划) 题面 Vjudge 洛谷 大意: 在有向图图中选出一个环,使得这个环的点权\(/\)边权最大 题解 分数规划 二分答案之 ...
随机推荐
- js/jquery 判断支持touchstart
if ('ontouchstart' in document.documentElement) { //... }
- 快速排序、查第k大
参考这里,提到两种方法,并说第二种好: http://www.cnblogs.com/qsort/archive/2011/05/09/2041653.html qsort的每一趟中,选定pivot以 ...
- 屌丝、小白怎么拿国内巨头offer
不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕仰慕.看看这些牛人,NOI金牌.开源社区名人,三年级開始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...
- 刚接触Joomla,写一下瞎折腾的初感受~
我这几天一直在苦苦寻找一款能够长期投靠的CMS产品,要求的是 1)必须支持命名空间 2)必须OOP + MVC分层 3)丰富分文档和使用群体,至少是出名的.免得哪一天他们解散了 4)-- 一開始我把目 ...
- TLS握手
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1 ...
- Java中的作用域有哪些
在Java语言中,变量的类型主要有3种:成员变量.静态变量和局部变量 首先说静态变量跟局部变量 静态变量不依赖于特定的实例,而是被所有实例共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配 ...
- Hessian Spirng实例
Spring实例 之前,我们做了很简单的纯Hessian的调用,虽然到此已经能够满足远程调用的需求了,但是我听说spring也能够访问hessian的远程服务,研究了一番,废话不多说,直接上示例. 业 ...
- BZOJ 3238 后缀数组+单调栈
单调栈跑两遍求出来 ht[i]为最小值的那段区间 //By SiriusRen #include <cstdio> #include <cstring> #include &l ...
- redis的持久化功能
基于快照持久化 修改配置文件,开始基于快照的选项 [root@localhostbin]#vim /etc/redis/redis.conf stop-writes-on-bgsave-error y ...
- Edge 通过代理无法打开网页,解决方案
netsh winhttp import proxy source=ie