Cod sursa(job #1952111)

Utilizator Tudor_B.Tudor Busuioc Tudor_B. Data 3 aprilie 2017 22:42:24
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
struct orase
  {
    int o,d;
    } *a[30002];
int nr[30002],c[2][30002],u,p,d,x,y,i,j,z,n,m,viz[30002];
 
int main(){
f>>n>>m>>x>>y;
 
for(i=1;i<=m;i++){
    f>>x>>y>>d;
     nr[x]++;
     nr[y]++;
     }
f.close();
ifstream f("sate.in");
f>>n>>m>>x>>y;
  for(i=0;i<=n;i++)
   {a[i]=new orase[nr[i]+2];
    a[i][0].d=0;
    }
for(i=1;i<=m;i++){
   f>>z>>j>>d;
    a[z][0].d++;
    a[z][a[z][0].d].o=j;
    a[z][a[z][0].d].d=d;
    a[j][0].d++;
    a[j][a[j][0].d].o=z;
    a[j][a[j][0].d].d=d;
    }
f.close();
u=1;p=1;  c[0][p]=x; viz[x]=1;
 
         for(i=1;i<=a[x][0].d;i++)
        {u++;
         c[0][u]=a[x][i].o;
         viz[c[0][u]]=1;
         c[1][u]=a[x][i].d;
         if (c[0][u]==y){
             p=u;
           break;
         }
        }
 
p++;
while(p<=u){  
       for(i=1;i<=a[c[0][p]][0].d;i++)
           if(viz[a[c[0][p]][i].o]==0){            
               viz[a[c[0][p]][i].o]=1;             
               if((a[c[0][p]][i].o<x&&c[0][p]<a[c[0][p]][i].o)||(a[c[0][p]][i].o>x&&c[0][p]>a[c[0][p]][i].o))
               { u++; c[0][u]=a[c[0][p]][i].o;
                      c[1][u]=c[1][p]-a[c[0][p]][i].d;
               }
               else if((c[0][p]<x&&a[c[0][p]][i].o>x)||(a[c[0][p]][i].o<x&&c[0][p]>x))
               { u++; c[0][u]=a[c[0][p]][i].o;
                       c[1][u]=a[c[0][p]][i].d-c[1][p];
               }
               else if((x<c[0][p]&&c[0][p]<a[c[0][p]][i].o)||(a[c[0][p]][i].o<c[0][p]&&c[0][p]<x))
               { u++; c[0][u]=a[c[0][p]][i].o;
                    c[1][u]=c[1][p]+a[c[0][p]][i].d;}
                         
                
               if(c[0][u]==y){
                p=u;
                break;
           }    
           }
     
        p++;
}
g<<c[1][u];
return 0;
}