Advertisement
Guest User

Untitled

a guest
Jan 18th, 2014
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 KB | None | 0 0
  1. #include <list>
  2. #include <map>
  3. #include <set>
  4. #include <deque>
  5. #include <stack>
  6. #include <queue>
  7. #include <algorithm>
  8. #include <sstream>
  9. #include <iostream>
  10. #include <iomanip>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <cstdlib>
  14. #include <memory.h>
  15. #include <ctime>
  16. #include <bitset>
  17.  
  18. using namespace std;
  19.  
  20. #define ABS(a) ((a>0)?a:-(a))
  21. #define MIN(a,b) ((a<b)?(a):(b))
  22. #define MAX(a,b) ((a<b)?(b):(a))
  23. #define FOR(i,a,n) for (int i=(a);i<(n);++i)
  24. #define FI(i,n) for (int i=0; i<(n); ++i)
  25. #define pnt pair <int, int>
  26. #define mp make_pair
  27. #define PI 3.14159265358979
  28. #define MEMS(a,b) memset(a,b,sizeof(a))
  29. #define LL long long
  30. #define U unsigned
  31.  
  32.  
  33.  
  34. int a[10][310][310];
  35. int pref[10][310][310];
  36. int suf[310][310];
  37. int now[310][310];
  38. int tmpsuf[310][310];
  39. int n,m;
  40.  
  41. int main()
  42. {
  43. #ifdef Fcdkbear
  44.     freopen("in.txt","r",stdin);
  45.     //freopen("out.txt","w",stdout);
  46.     double beg=clock();
  47. #endif
  48.  
  49.     int B=clock();
  50.     scanf("%d%d",&n,&m);
  51.     FOR(i,0,n)
  52.         FOR(j,0,n)
  53.             if (i==j)
  54.                 a[0][i][j]=0;
  55.             else
  56.                 a[0][i][j]=1000000000;
  57.     FOR(i,0,m)
  58.     {
  59.         int v1,v2,t1,t2;
  60.         scanf("%d%d%d%d",&v1,&v2,&t1,&t2);
  61.         a[0][v1-1][v2-1]=t1-t2;
  62.     }
  63.     FOR(i,0,n)
  64.         FOR(j,0,n)
  65.             pref[0][i][j]=a[0][i][j];
  66.     FOR(it,1,10)
  67.     {
  68.         FOR(i,0,n)
  69.             FOR(j,0,n)
  70.                 if (i!=j)
  71.                     a[it][i][j]=1000000000;
  72.                 else
  73.                     a[it][i][j]=0;
  74.         FOR(i,0,n)
  75.             FOR(j,0,n)
  76.                 if (i==j)
  77.                     pref[it][i][j]=0;
  78.                 else
  79.                     pref[it][i][j]=1000000000;
  80.         FOR(k,0,n)
  81.             FOR(i,0,n)
  82.                 FOR(j,0,n)
  83.                     a[it][i][j]=MIN(a[it][i][j],a[it-1][i][k]+a[it-1][k][j]);
  84.         FOR(k,0,n)
  85.             FOR(i,0,n)
  86.                 FOR(j,0,n)
  87.                     pref[it][i][j]=MIN(pref[it][i][j],pref[it-1][i][k]+a[it][k][j]);
  88.     }
  89.     int who=-1;
  90.     int res1=0,res2=-1;
  91.     FOR(it,0,10)
  92.     {
  93.         bool f=false;
  94.         int min1=1000000000;
  95.         FOR(i,0,n)
  96.             min1=MIN(min1,pref[it][i][i]);
  97.         if (min1<0)
  98.         {
  99.             res1|=(1<<it);
  100.             res2=-min1;
  101.             who=it;
  102.             break;
  103.         }
  104.     }
  105.     FOR(i,0,n)
  106.         FOR(j,0,n)
  107.             suf[i][j]=a[who][i][j];
  108.     for (int it=who-1; it>=0; --it)
  109.     {
  110.         FOR(i,0,n)
  111.             FOR(j,0,n)
  112.                 if (i==j)
  113.                     now[i][j]=0;
  114.                 else
  115.                     now[i][j]=1000000000;
  116.         if (it!=0)
  117.             FOR(k,0,n)
  118.                 FOR(i,0,n)
  119.                     FOR(j,0,n)
  120.                         now[i][j]=MIN(now[i][j],pref[it-1][i][k]+suf[k][j]);
  121.         else
  122.         {
  123.             FOR(i,0,n)
  124.                 FOR(j,0,n)
  125.                     now[i][j]=suf[i][j];
  126.         }
  127.         int min1=1000000000;
  128.         FOR(i,0,n)
  129.             min1=MIN(min1,now[i][i]);
  130.         if (min1>=0)
  131.         {
  132.             res1|=(1<<it);
  133.             FOR(i,0,n)
  134.                 FOR(j,0,n)
  135.                     tmpsuf[i][j]=suf[i][j];
  136.             FOR(k,0,n)
  137.                 FOR(i,0,n)
  138.                     FOR(j,0,n)
  139.                         suf[i][j]=MIN(suf[i][j],tmpsuf[i][k]+a[it][k][j]);
  140.         }
  141.         else
  142.             res2=-min1;
  143.     }
  144.     cout<<res1<<" "<<res2<<endl;
  145.  
  146. #ifdef Fcdkbear
  147.     double end=clock();
  148.     fprintf(stderr,"*** Total time = %.3lf ***\n",(end-beg)/CLOCKS_PER_SEC);
  149. #endif
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement