Advertisement
Guest User

ps_em

a guest
Dec 13th, 2016
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1.  
  2. using namespace std;
  3. ll n,m;
  4. ll hit[105][105];
  5. ll wat[105][105];
  6. bool vis1[105][105];
  7. bool vis2[105][105];
  8. vector<ll>vokhit;
  9. ll cka,cpa;
  10. void dfs(int r,int c)
  11. {
  12.     if(r>n || r<1 || c<1 || c>m)
  13.     {
  14.         wat[cka][cpa]=0;
  15.  
  16.         return;
  17.  
  18.     }
  19.     if(vis1[r][c])
  20.         return;
  21.  
  22.  
  23.     if(r==1 || r==n || c==1 || c==m)
  24.     {
  25.         wat[cka][cpa]=0;
  26.         return;
  27.     }
  28.  
  29.     vis1[r][c]=1;
  30.     ll loki = hit[r][c+1];
  31.     ll poki = hit[r][c];
  32.     if(loki<=poki)
  33.     {
  34.         dfs(r,c+1);
  35.     }
  36.     if(hit[r+1][c]<=hit[r][c])
  37.     {
  38.         dfs(r+1,c);
  39.     }
  40.     if(hit[r-1][c]<=hit[r][c])
  41.     {
  42.         dfs(r-1,c);
  43.     }
  44.  
  45.     if(hit[r][c-1]<=hit[r][c])
  46.     {
  47.         dfs(r,c-1);
  48.     }
  49.  
  50. }
  51. int pok(int r,int c)
  52. {
  53.     if(r==1 || r==n || c==1 || c==m)
  54.         return 1;
  55.     return 0;
  56. }
  57. ll dfs2(int r,int c)
  58. {
  59.  
  60.     if(vis2[r][c])
  61.         return INF;
  62.  
  63.  
  64.     if(r==1 || r==n || c==1 || c==m)
  65.     {
  66.         return hit[r][c];
  67.     }
  68.  
  69.  
  70.     if(wat[r][c])
  71.     {
  72.         vokhit.pb(hit[r][c]);
  73.  
  74.     }
  75.     else
  76.     {
  77.         return hit[r][c];
  78.     }
  79.  
  80.     vis2[r][c]=1;
  81.     ll mni = INF;
  82.  
  83.  
  84.     mni = min(mni,dfs2(r+1,c));
  85.  
  86.     mni = min(mni,dfs2(r-1,c));
  87.  
  88.     mni = min(mni,dfs2(r,c+1));
  89.  
  90.     mni = min(mni,dfs2(r,c-1));
  91.  
  92.     return mni;
  93.  
  94.  
  95. }
  96. int main()
  97. {
  98.     //freopen("out.txt","w",stdout);
  99.     int tc;
  100.     sfi(tc);
  101.     while(tc--)
  102.     {
  103.  
  104.         scanf("%lld %lld",&n,&m);
  105.         loop(i,1,n)
  106.         {
  107.             loop(j,1,m)
  108.             {
  109.                 wat[i][j]=1;
  110.             }
  111.         }
  112.  
  113.  
  114.  
  115.         loop(r,1,n)
  116.         {
  117.             loop(c,1,m)
  118.             {
  119.                 cin>>(hit[r][c]);
  120.             }
  121.         }
  122.  
  123.  
  124.         ms(vis1,false);
  125.         loop(r,1,n)
  126.         {
  127.             loop(c,1,m)
  128.             {
  129.                 ms(vis1,false);
  130.                 cka = r,cpa =c;
  131.                 dfs(r,c);
  132.             }
  133.         }
  134.         ll ans = 0;
  135.         ms(vis2,false);
  136.  
  137.         loop(r,1,n)
  138.         {
  139.             loop(c,1,m)
  140.             {
  141.  
  142.                 if(wat[r][c] && !vis2[r][c])
  143.                 {
  144.                     cka = r,cpa =c;
  145.                     ll wall =  dfs2(r,c);
  146.                     for(int ix=0; ix<SZ(vokhit); ix++)
  147.                     {
  148.                         if(vokhit[ix]<wall)
  149.                             ans+=(wall-vokhit[ix]);
  150.                     }
  151.                     vokhit.clear();
  152.  
  153.                    
  154.                 }
  155.  
  156.             }
  157.         }
  158.  
  159.         pf("%lld\n",ans);
  160.  
  161.  
  162.     }
  163.  
  164.  
  165.  
  166.     return 0;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement