poj 3169 Layout (差分约束+Bellman )

题意:输入NML MDN默示有N个牛按1-N排成一排,ML,默示有ML行,每行输入A, B, D默示A牛和B牛最远间隔为DMD默示有MD行,每行输入A,B,D默示A牛和B来间隔为D,求满足所有前提的1-N的最大间隔。

比较简单的差分约束,这个周周赛的A题

[html] view plain copy print ?
  1. #include <iostream> 
  2. #include <cstdlib> 
  3. #include <cstdio> 
  4. #include <cstring> 
  5. #include <queue> 
  6. #include <stack> 
  7. #include <algorithm> 
  8. const int N = 210
  9. const int maxn = 1010
  10. const int maxm = 21000
  11. #define FOR(i,a,b) for(int i=a;i<b;i++) 
  12. #define init(a) memset(a,0,sizeof(a)) 
  13. #define MIN INT_MIN 
  14. #define MAX INT_MAX 
  15. #define LL long long 
  16. using namespace std; 
  17. const int INF=0x3f3f3f3f
  18.  
  19. int dis[maxm],cnt,n; 
  20. struct node 
  21.     int u,v,w; 
  22. } edge[maxm]; 
  23. void add(int u,int v,int w) 
  24.     edge[cnt].u=u
  25.     edge[cnt].v=v
  26.     edge[cnt].w=w
  27.     cnt++; 
  28. int Bellman(int s,int t) 
  29.     int flag; 
  30.     FOR(i,0,t+1) 
  31.     { 
  32.         dis[i]=INF; 
  33.     } 
  34.     dis[s]=0; 
  35.     FOR(i,0,n) 
  36.     { 
  37.         flag=0
  38.         FOR(j,0,cnt) 
  39.         { 
  40.             if(dis[edge[j].v] > dis[edge[j].u] + edge[j].w) 
  41.             { 
  42.                 dis[edge[j].v] = dis[edge[j].u] + edge[j].w; 
  43.                 flag = 1
  44.             } 
  45.         } 
  46.         if(!flag) 
  47.             break; 
  48.     } 
  49.     if(flag==1) 
  50.         return -1; 
  51.     else if(dis[t]==INF) 
  52.         return -2; 
  53.     else 
  54.         return dis[t]; 
  55. int main() 
  56.     int u,v,w,a,b; 
  57.     while(scanf("%d%d%d",&n,&a,&b)!=EOF) 
  58.     { 
  59.         cnt=0
  60.         FOR(i,0,a) 
  61.         { 
  62.             scanf("%d%d%d",&u,&v,&w); 
  63.             add(u,v,w); 
  64.         } 
  65.         FOR(i,0,b) 
  66.         { 
  67.             scanf("%d%d%d",&u,&v,&w); 
  68.             add(v,u,-w); 
  69.         } 
  70.       int ans = Bellman(1,n); 
  71.       cout<<ans<<endl
  72.     } 
  73.     return 0; 

你可能感兴趣的:(poj 3169 Layout (差分约束+Bellman ))