Guest User

UVA 949

a guest
Sep 21st, 2013
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.59 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<math.h>
  4. #include<string.h>
  5. #include<string>
  6. #include<stdlib.h>
  7. #include<map>
  8. #include<vector>
  9. #include<queue>
  10. #include<stack>
  11. #include<algorithm>
  12. #include<set>
  13. using namespace std;
  14.  
  15. // Define Some Variables
  16. #define eps 1e-14
  17. #define si 110
  18. #define pi acos(-1.0)
  19. #define inf (1<<30)-1
  20. #define mod 1000000000 //10^9
  21.  
  22. //Define Some Functions
  23. #define even(a) ((a)%2==0)
  24. #define odd(a) ((a)%2==1)
  25. #define max(a,b) (a>b ?a:b)
  26. #define min(a,b) (a<b ?a:b)
  27. #define sqr(a)((a)*(a))
  28. #define area(x1,y1,x2,y2,x3,y3) (x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)) //Area of a triangle
  29. #define distance(x1,y1,x2,y2) (sqr(x1-x2)+sqr(y1-y2)) //Distance between two points
  30. #define mem(a,v) memset(a,v,sizeof(a))
  31. inline bool compare( double a, double b ) { return fabs( a-b ) < 1e-9 ; }
  32. #define fr(i,a,b) for(i=a;i<=b;i++)
  33. #define rep(i,a,b) for(i=a;i<b;i++)
  34. #define rev(i,a,b)  for(i=a;i>=b;i--)
  35.  
  36. //typedef __int64 i64;
  37.  
  38. int dx[]={0,0,1,-1};
  39. int dy[]={1,-1,0,0};
  40. int i,j,k,l,n,m,r,fg,mat[si][si][si][si],x,y,x2,y2,cst[si][si],t;
  41. vector<int>ve[si][si];
  42. queue<int>q;
  43.  
  44. /*
  45. i64 bmod(i64 a,i64 b)
  46. {
  47.     if(b==0)
  48.         return 1;
  49.     i64 x=bmod(a,b/2);
  50.     x=(x*x)%mod;
  51.     if(b%2==1)
  52.         x=(x*a)%mod;
  53.     return x;
  54. }*/
  55.  
  56. int gcd(int a,int b)
  57. {
  58.     while(b>0)
  59.     {
  60.         a%=b;
  61.         a^=b;
  62.         b^=a;
  63.         a^=b;
  64.     }
  65.     return a;
  66. }
  67.  
  68. /*
  69. i64 lcm(i64 a,i64 b)
  70. {
  71.     return ((a*b)/gcd(a,b));
  72. }
  73. */
  74.  
  75. int check(int px,int py,int x,int y)
  76. {
  77.     if(x>=0&&x<n&&y>=0&&y<m&&cst[x][y]>(cst[px][py]+1)&&mat[px][py][x][y]==0)
  78.         return 1;
  79.     return 0;
  80. }
  81.  
  82. void bfs()
  83. {
  84.     int i,u,v,nwu,nwv,chk,p;
  85.     q.push(0);
  86.     q.push(0);
  87.     sort(ve[0][0].begin(),ve[0][0].end());
  88.     l=ve[0][0].size();
  89.     p=0;
  90.     rep(i,0,l)
  91.     {
  92.         t=ve[0][0][i];
  93.         if(t!=p)
  94.             break;
  95.         p++;
  96.     }
  97.     cst[0][0]=p;
  98.     while(!q.empty())
  99.     {
  100.         u=q.front();
  101.         q.pop();
  102.         v=q.front();
  103.         q.pop();
  104.         if(!fg)
  105.         {
  106.             rep(i,0,4)
  107.             {
  108.                 nwu=u+dx[i];
  109.                 nwv=v+dy[i];
  110.                 chk=check(u,v,nwu,nwv);
  111.                 if(!chk)
  112.                     continue;
  113.                 l=ve[nwu][nwv].size();
  114.                 sort(ve[nwu][nwv].begin(),ve[nwu][nwv].end());
  115.                 p=cst[u][v]+1;
  116.                 rep(j,0,l)
  117.                 {
  118.                     t=ve[nwu][nwv][j];
  119.                     if(p!=t)
  120.                         break;
  121.                     p++;
  122.                 }
  123.                 cst[nwu][nwv]=p;
  124.                 if(nwu==n-1&&nwv==m-1)
  125.                 {
  126.                     fg=1;
  127.                     break;
  128.                 }
  129.                 q.push(nwu);
  130.                 q.push(nwv);
  131.             }
  132.         }
  133.     }
  134. }
  135.  
  136. int main()
  137. {
  138. //  freopen("input.txt", "r", stdin);
  139. //  freopen("output.txt", "w", stdout);
  140.  
  141.     while(~scanf("%d%d",&n,&m))
  142.     {
  143.         rep(i,0,n)
  144.         {
  145.             rep(j,0,m)
  146.             {
  147.                 ve[i][j].clear();
  148.                 cst[i][j]=inf;
  149.                 rep(k,0,n)
  150.                 {
  151.                     rep(l,0,m)
  152.                         mat[i][j][k][l]=0;
  153.                 }
  154.             }
  155.         }
  156.         scanf("%d",&r);
  157.         while(r--)
  158.         {
  159.             scanf("%d%d%d%d",&x,&y,&x2,&y2);
  160.             mat[x][y][x2][y2]=1;
  161.         }
  162.         scanf("%d",&r);
  163.         while(r--)
  164.         {
  165.             scanf("%d%d%d",&t,&x,&y);
  166.             ve[x][y].push_back(t);
  167.         }
  168.         fg=0;
  169.         bfs();
  170.         printf("%d\n",cst[n-1][m-1]);
  171.     }
  172.     return 0;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment