差分约束系统讲解看这里:http://blog.csdn.net/xuezhongfenfei/article/details/8685313

模板题,不多说。要注意的一点是!!!对于带有within的语句,要建立两个不等式!!!x要在y开始的z分钟内开始的话,x<=y+z 并且 x>=y。别忘了。

spfa判负权回路。

In most recipes, certain tasks have to be done before others. For each task, if we are given a list of other tasks that it depends on, then it is relatively straightforward to come up with a schedule of tasks that satisfies the dependencies and produces a stunning dish. Many of us know that this can be solved by some algorithm called toplogical sort.

But life is not so easy sometimes. For example, here is a recipe for making pizza dough:

  1. Mix the yeast with warm water, wait for 5 to 10 minutes.
  2. Mix the the remaining ingredients 7 to 9 minutes.
  3. Mix the yeast and the remaining ingredients together for 10 to 15 minutes.
  4. Wait 90 to 120 minutes for the dough to rise.
  5. Punch the dough and let it rest for 10 to 15 minutes.
  6. Roll the dough.

In this case, tasks 1 and 2 may be scheduled after the first minute (we always spend the first minute to read the recipe and come up with a plan). The earliest task 3 may be started is at 8 minutes, and task 4 may start at 18 minutes after the start, and so on. This recipe is relatively simple, but if some tasks have many dependent tasks then scheduling can become unmanageable. Sometimes, the recipe may in fact be impossible to execute. For example, consider the following abstract recipe:

  1. task 1
  2. after task 1 but within 2 minutes of it, do task 2
  3. at least 3 minutes after task 2 but within 2 minutes of task 1, do task 3

In this problem, you are given a number of tasks. Some tasks are related to another based on their starting times. You are asked to assign a starting time to each task to satisfy all constraints if possible, or report that no valid schedule is possible.

Input

The input consists of a number of cases. The first line of each case gives the number of tasks n, (1 ≤ n ≤ 100). This is followed by a line containing a non-negative integer m giving the number of constraints. Each of the next mlines specify a constraint. The two possible forms of constraints are:

task i starts at least A minutes later than task j
task i starts within A minutes of the starting time of task j

where i and j are the task numbers of two different tasks (1 ≤ i, j ≤ n), and A is a non-negative integer (A ≤ 150). The first form states that task imust start at least A minutes later than the start time of task j. The second form states that task i must start no earlier than task j, and within Aminutes of the starting time of task j. There may be multiple constraints involving the same pair of tasks. Note that at least and within include the end points (i.e. if task 1 starts at 1 minute and task 2 starts at 4 minutes, then task 2 starts at least 3 minutes later than task 1, and within 3 minutes of the starting time of task 1).

The input is terminated by n = 0.

Output

For each case, output a single line containing the starting times of task 1 through task n separated by a single space. Each starting time should specify the minute at which the task starts. The starting time of each task should be positive and less than 1000000. There may be many possible schedules, and any valid schedule will be accepted. If no valid schedule is possible, print Impossible. on a line instead.

Sample input

6
10
task 3 starts at least 5 minutes later than task 1
task 3 starts within 10 minutes of the starting time of task 1
task 3 starts at least 7 minutes later than task 2
task 3 starts within 9 minutes of the starting time of task 2
task 4 starts at least 10 minutes later than task 3
task 4 starts within 15 minutes of the starting time of task 3
task 5 starts at least 90 minutes later than task 4
task 5 starts within 120 minutes of the starting time of task 4
task 6 starts at least 10 minutes later than task 5
task 6 starts within 15 minutes of the starting time of task 5
3
4
task 2 starts at least 0 minutes later than task 1
task 2 starts within 2 minutes of the starting time of task 1
task 3 starts at least 3 minutes later than task 2
task 3 starts within 2 minutes of the starting time of task 1
0

Sample Output

3 1 8 18 108 118
Impossible.
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int v[100010],first[110],w[100010],__next[100010],e;
void AddEdge(int U,int V,int W)
{
v[++e]=V;
w[e]=W;
__next[e]=first[U];
first[U]=e;
}
//struct Point
//{
// int d,u;
// Point(const int &X,const int &Y){d=X;u=Y;}
// Point(){}
//};
int n,m;
queue<int>q;
int dis[110],cnts[110];
bool inq[110];
bool spfa(const int &s)
{
memset(inq,0,sizeof(inq));
memset(cnts,0,sizeof(cnts));
while(!q.empty())
q.pop();
for(int i=1;i<=n+1;++i)
dis[i]=1000000007;
dis[s]=0; q.push(s); inq[s]=1; ++cnts[s];
while(!q.empty())
{
int U=q.front();
for(int i=first[U];i;i=__next[i])
if(dis[v[i]]>dis[U]+w[i])
{
dis[v[i]]=dis[U]+w[i];
if(!inq[v[i]])
{
q.push(v[i]);
inq[v[i]]=1;
++cnts[v[i]];
if(cnts[v[i]]>n+1)
return 0;
}
}
q.pop(); inq[U]=0;
}
return 1;
}
int main()
{
char op[12],s[12];
int x,y,z;
while(1)
{
scanf("%d",&n);
if(!n)
break;
scanf("%d",&m);
e=0;
memset(first,0,sizeof(first));
memset(__next,0,sizeof(__next));
memset(v,0,sizeof(v));
memset(w,0,sizeof(w));
for(int i=1;i<=m;++i)
{
scanf("%s",op);
scanf("%d",&x);
scanf("%s",op);
scanf("%s",op);
if(op[0]=='a')
{
scanf("%s",op);
scanf("%d",&z);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%d",&y);
AddEdge(x,y,-z);
}
else
{
scanf("%d",&z);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%s",op);
scanf("%d",&y);
AddEdge(y,x,z);
AddEdge(x,y,0);
}
}
for(int i=1;i<=n;++i)
AddEdge(n+1,i,0);
if(spfa(n+1))
{
int t=*min_element(dis+1,dis+n+1);
// if((*max_element(dis+1,dis+n+1))-t+1>=1000000)
// {
// puts("Impossible.");
// continue;
// }
for(int i=1;i<n;++i)
printf("%d ",dis[i]-t+1);
printf("%d\n",dis[n]-t+1);
}
else
puts("Impossible.");
}
return 0;
}

【差分约束系统】【spfa】UVALive - 4885 - Task的更多相关文章

  1. 差分约束系统 + spfa(A - Layout POJ - 3169)

    题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...

  2. 【差分约束系统/SPFA】POJ3169-Layout

    [题目大意] n头牛从小到大排,它们之间某些距离不能大于一个值,某些距离不能小于一个值,求第一头牛和第N头牛之间距离的最大值. [思路] 由题意可以得到以下不等式d[AL]+DL≥d[BL]:d[BD ...

  3. BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA

    最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...

  4. UVALive - 4885 Task 差分约束

    Task 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page ...

  5. 差分约束系统+spfa(B - World Exhibition HDU - 3592 )

    题目链接:https://cn.vjudge.net/contest/276233#problem/B 思路和上一个一样,不过注意点有两个,第一,对dis数组进行初始化的时候,应该初始化成ox3f3f ...

  6. PKU 1201 Intervals(差分约束系统+Spfa)

    题目大意:原题链接 构造一个集合,这个集合内的数字满足所给的n个条件,每个条件都是指在区间[a,b]内至少有c个数在集合内.问集合最少包含多少个点.即求至少有多少个元素在区间[a,b]内. 解题思路: ...

  7. ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)

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

  8. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

  9. 【bzoj3436】小K的农场 差分约束系统+最长路-Spfa

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801470.html 题目描述 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总 ...

随机推荐

  1. 常见编程语言对REPL支持情况小结

    最近跟一个朋友聊起编程语言的一些特性,他有个言论让我略有所思:“不能REPL的都是渣”.当然这个观点有点偏激,但我们可以探究一下,我们常用的编程语言里面,哪些支持REPL,哪些不支持,还有REPL的一 ...

  2. yum命令Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

    yum命令Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 博客分类: linux   三种解决方案 我采取第三种方案解决的 第一种: linu ...

  3. Unable to start activity ComponentInfo{com.example.administrator.myapplication/com.example.administrator.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #0: Binary XM

    本来就是把fragment写死在activity的xml模板里面,结果报了这个错误, Unable to start activity ComponentInfo{com.example.admini ...

  4. Socket和ServerSocket学习笔记

    对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求.这会,Socket对于我们来说就非常实用了.下面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSock ...

  5. 关于javascript中的this 一段小实例深有体会啊

    先声明鄙人正在努力的把脚抬进门来,说的都是比较粗浅的知识,但都是我实践中得出的体会,很深刻.  正在自学中挣扎的DOG. 先看段代码: function highlightRows() { if(!d ...

  6. CentOS 7 单用户模式修改root密码

    1)在启动grub菜单,选择编辑选项启动 2)按键盘e键,来进入编辑界面 3)找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4)现在按下Control+x,使 ...

  7. cuda yv12_to_rgb24

    前言 项目需要将yv12转rgb24,由于基于x86平台,开始就没多想,直接用ipp加速实现了,后来在评估项目瓶颈的时候发现,1080p的视频每一帧转换居然要花8ms,刚好项目里有用到nvidia g ...

  8. ZOJ 3598 Spherical Triangle球面几何公式应用

    #include <map> #include <set> #include <list> #include <cmath> #include < ...

  9. CSS3颜色渐变模式总结

    1.线性渐变:linear-gradient 语法:= linear-gradient([ [ | to [, ]+) = [left | right] || [top | bottom] = [ | ...

  10. 《Java编程思想》笔记 第十四章 类型信息

    1.RTTI:在运行时识别一个对象类型 JAVA在运行时 有时要 识别对象和类的信息这个机制叫RTTI.Java提供了两种机制去做这件事.传统的RTTI 和 反射. 传统的RTTI  假定编译时就已经 ...