Time Limit: 1000MS
Memory Limit: 65536K

Total Submissions: 12565
Accepted: 6043

Description

Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 <= N <= 1,000) cows numbered 1..N standing along a straight line waiting for feed. The cows are standing in the same order as they are numbered, and since they can be rather pushy, it is possible that two or more cows can line up at exactly the same location (that is, if we think of each cow as being located at some coordinate on a number line, then it is possible for two or more cows to share the same coordinate).
Some cows like each other and want to be within a certain distance of each other in line. Some really dislike each other and want to be separated by at least a certain distance. A list of ML (1 <= ML <= 10,000) constraints describes which cows like each other and the maximum distance by which they may be separated; a subsequent list of MD constraints (1 <= MD <= 10,000) tells which cows dislike each other and the minimum distance by which they must be separated.
Your job is to compute, if possible, the maximum possible distance between cow 1 and cow N that satisfies the distance constraints.

Input

Line 1: Three space-separated integers: N, ML, and MD.
Lines 2..ML+1: Each line contains three space-separated positive integers: A, B, and D, with 1 <= A < B <= N. Cows A and B must be at most D (1 <= D <= 1,000,000) apart.
Lines ML+2..ML+MD+1: Each line contains three space-separated positive integers: A, B, and D, with 1 <= A < B <= N. Cows A and B must be at least D (1 <= D <= 1,000,000) apart.

Output

Line 1: A single integer. If no line-up is possible, output -1. If cows 1 and N can be arbitrarily far apart, output -2. Otherwise output the greatest possible distance between cows 1 and N.

Sample Input

  1. 4 2 1
  2. 1 3 10
  3. 2 4 20
  4. 2 3 3

Sample Output

  1. 27

Hint

Explanation of the sample:
There are 4 cows. Cows #1 and #3 must be no more than 10 units apart, cows #2 and #4 must be no more than 20 units apart, and cows #2 and #3 dislike each other and must be no fewer than 3 units apart.
The best layout, in terms of coordinates on a number line, is to put cow #1 at 0, cow #2 at 7, cow #3 at 10, and cow #4 at 27.

Source

USACO 2005 December Gold

【题解】

      ①区间前缀和差分约束

      ②对于有解的问题dfs_SPFA很慢

      ③推荐双端队列和fread读入优化

  1. #include<queue>
  2. #include<stdio.h>
  3. #define inf 1000000007
  4. #define go(i,a,b) for(int i=a;i<=b;i++)
  5. #define fo(i,a,x) for(int i=a[x],v=e[i].v;i;i=e[i].next,v=e[i].v)
  6. const int N=2003;bool inq[N];
  7. struct E{int v,next,w;}e[N*200];
  8. int n,X,Y,A,B,D,head[N],k=1,d[N],negative;
  9. void ADD(int u,int v,int w){e[k]=(E){v,head[u],w};head[u]=k++;}
  10.  
  11. inline char Getchar()
  12. {
  13. static char C[1000000],*p1,*p2;
  14. if(p1==p2)p2=(p1=C)+fread(C,1,1000000,stdin);
  15. if(p1==p2)return EOF;return *p1++;
  16. }
  17.  
  18. inline void Read(int &x)
  19. {
  20. x=0;char c=Getchar();
  21. while(c<'0'||c>'9')c=Getchar();
  22. while(c>='0'&&c<='9')x=x*10+c-'0',c=Getchar();
  23. }
  24.  
  25. void Build()
  26. {
  27. go(i,1,X)Read(A),Read(B),Read(D),ADD(A,B,D);
  28. go(i,1,Y)Read(A),Read(B),Read(D),ADD(B,A,-D);
  29. go(i,2,n)ADD(i,i-1,0);
  30. }
  31.  
  32. std::queue<int>q;
  33. void SPFA()
  34. {
  35. go(i,1,n)d[i]=inf;d[1]=0;q.push(1);int vis[N]={0};
  36. while(!q.empty()){int u=q.front();q.pop();inq[u]=0;
  37. fo(i,head,u)if(d[u]+e[i].w<d[v])
  38. {
  39. d[v]=d[u]+e[i].w;
  40. if(++vis[v]>n){negative=1;return;}
  41. !inq[v]?q.push(v),inq[v]=1:1;}
  42. }
  43. }
  44.  
  45. int main()
  46. {
  47. Read(n);Read(X);Read(Y);
  48.  
  49. Build(); SPFA();
  50.  
  51. if(negative){puts("-1");return 0;}
  52. if(d[n]==inf){puts("-2");return 0;}
  53. if(d[n]!=inf){printf("%d\n",d[n]);return 0;}
  54. }//Paul_Guderian

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

【POJ 3169 Layout】的更多相关文章

  1. poj 3169 Layout (差分约束)

    3169 -- Layout 继续差分约束. 这题要判起点终点是否连通,并且要判负环,所以要用到spfa. 对于ML的边,要求两者之间距离要小于给定值,于是构建(a)->(b)=c的边.同理,对 ...

  2. POJ 3169 Layout 【差分约束】+【spfa】

    <题目链接> 题目大意: 一些母牛按序号排成一条直线.有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最大距离.如果没有最大距离输出-1,如果1.n之间距离任意就 ...

  3. POJ 3169 Layout(差分约束啊)

    题目链接:http://poj.org/problem? id=3169 Description Like everyone else, cows like to stand close to the ...

  4. POJ 3169.Layout 最短路

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11612   Accepted: 5550 Descripti ...

  5. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...

  6. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...

  7. 【POJ 2572 Advertisement】

    Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 947Accepted: 345Special Judge Description ...

  8. 【POJ 1201 Intervals】

    Time Limit: 2000MSMeamory Limit: 65536K Total Submissions: 27949Accepted: 10764 Description You are ...

  9. POJ 3169 Layout (HDU 3592) 差分约束

    http://poj.org/problem?id=3169 http://acm.hdu.edu.cn/showproblem.php?pid=3592 题目大意: 一些母牛按序号排成一条直线.有两 ...

随机推荐

  1. python__标准库 : urllib2

    urllib,urllib2 urllib库主要用 urlencode()把字典转换成url的get参数或者post参数 或者用 quote() 进行编码unquote进行解码 用urllib2.Pr ...

  2. 微信程序跳转到页面底部 scroll-view

    wx.createSelectorQuery().select('#j_page').boundingClientRect(function (rect) { wx.pageScrollTo({ sc ...

  3. python系列7进程线程和协程

    目录 进程 线程 协程  上下文切换 前言:线程和进程的关系图 由下图可知,在每个应用程序执行的过程中,都会去产生一个主进程和主线程来完成工作,当我们需要并发的执行的时候,就会通过主进程去生成一系列的 ...

  4. 【Android】下拉刷新实现

    关于这方面的文章百度下有很多,我就只写写我自己实现过程. 我觉得学习一门语言不是做了几个项目就可以认为自己会了,这只是暂时的,若没有笔记,时间长了,你是怎么解决某些问题,估计连你自己都忘了,又得费时费 ...

  5. poj1050 dp动态规划

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  6. ASP.NET MVC文件上传【转】

    最近用到了文件上传功能,下面给出ASP.NET MVC文件上传的一个简单示例: 一.前端代码 @using (Html.BeginForm("UploadFile", " ...

  7. c/c++不能返回局部对象和局部变量的指针或引用解释

    在编写c/c++代码时,调用函数的书写让程序变得整洁易读,但是调用函数的返回值(局部变量的返回值,变量,结构体,数组等)也有注意事项.c/c++严禁返回局部变量的指针或引用. 其实函数的返回值的规则非 ...

  8. 利尔达NB-IOT的PSM和eDRX低功耗模式笔记

    1. NB-IOT的技术优势,广覆盖,NB-IOT与GPRS和LTE相比较,最大链路预算提升了20dB,相当于提升了100倍,即使在地车车库.地下室.地下管道等普通无线网络信号难以到达的地方也容易覆盖 ...

  9. PowerMock简单使用

    网上有很多PowerMock的介绍,此处就不再罗列 下面给出一些资源地址以及几篇案例 mockito资源: (1)源码:https://github.com/mockito/mockito power ...

  10. 关于缺失值(missing value)的处理---机器学习 Imputer

    关于缺失值(missing value)的处理 在sklearn的preprocessing包中包含了对数据集中缺失值的处理,主要是应用Imputer类进行处理. 首先需要说明的是,numpy的数组中 ...