Guest User

Untitled

a guest
Jun 15th, 2020
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. // x^y≡x^(y%(p-1))mod p
  4. // but there is a condition that x needs to be coprime to p
  5. ///assic value of ('0'-'9') is(48 - 57) and (a-z) is (97-122) and (A-Z) is(65-90) and 32 for space
  6. typedef long long int ll;
  7. typedef pair<ll, ll> pii;
  8. typedef vector<pii> vii;
  9. #define  pb push_back
  10. #define f(i,a,b) for(ll i=a;i<b;i++)
  11. #define fo(i,a,b) for(ll i = a; i<=b;i+=1)
  12. #define rf(i,a,b)  for(ll i=a;i>=b;i--)
  13. #define vll vector<ll>
  14. #define tests() int test_cases ; cin >> test_cases ; while(test_cases--)
  15. #define ub upper_bound
  16. #define lb lower_bound
  17. #define all(v) v.begin(),v.end()
  18. #define MAXN 100010
  19. #define MOD 1000000007
  20. #define mod 998244353
  21. #define deb(x) cout << '>' << #x << ':' << x << endl;
  22. #define sp " "
  23. #define MS(x,y) fill_n(*x, sizeof x / sizeof **x, y);
  24. #define INF 1000000000000000000
  25. ll power(ll x, ll y,ll p)
  26. {
  27.     ll res = 1;     // Initialize result
  28.     x = x % p;
  29.     if (y==0)return 1;
  30.     if(x==0)return 0;  
  31.     while (y > 0)
  32.     {
  33.         if (y & 1)
  34.             res = (res*x) % p;    
  35.         y = y>>1; // y = y/2
  36.         x = (x*x) % p;  // Change x to x^2
  37.     }
  38.     return res;
  39. }
  40. int gcd(int a, int b) { if (a == 0)return b;return gcd(b % a, a);}
  41.  
  42. ll modinv(ll a,ll p){return power(a,p-2,p);}
  43.  
  44. int solve(){
  45.     ll n,m;
  46.     cin>>n>>m;
  47.     tuple<int,int,int> tup[m];
  48.     tuple<int,int,int> rev[m];
  49.     f(i,0,m){
  50.         int a,b,c;
  51.         cin>>a>>b>>c;
  52.         tup[i] = make_tuple(a,b,-c);
  53.         rev[i] = make_tuple(b,a,-c);
  54.     }
  55.     bool f1 = false,f2 = false;
  56.     ll dist[n+1];
  57.     fo(i,1,n){
  58.         dist[i] = INF;
  59.     }
  60.     dist[1] = 0;
  61.     fo(i,1,n-1){
  62.         fo(j,0,m-1){
  63.             ll u,v,w;
  64.             tie(u,v,w) = tup[j];
  65.             dist[v] = min(dist[v], dist[u]+w);
  66.         }
  67.     }
  68.     fo(j,0,m-1){
  69.         ll u,v,w;
  70.         tie(u,v,w) = tup[j];
  71.         if (dist[v]>dist[u]+w)
  72.         {
  73.             dist[v] = dist[u]+w;
  74.             if (dist[v]<=1e9*5000)
  75.             {
  76.                 f1 = true;
  77.             }
  78.         }
  79.     }
  80.     ll store = dist[n];
  81.     fo(i,1,n){
  82.         dist[i] = INF;
  83.     }
  84.     dist[n] = 0;
  85.     fo(i,1,n-1){
  86.         fo(j,0,m-1){
  87.             ll u,v,w;
  88.             tie(u,v,w) = rev[j];
  89.             if (dist[v]>dist[u]+w)
  90.             {
  91.                 dist[v] = min(dist[v], dist[u]+w);
  92.             }
  93.         }
  94.     }
  95.     fo(j,0,m-1){
  96.         ll u,v,w;
  97.         tie(u,v,w) = rev[j];
  98.         if (dist[v]>dist[u]+w)
  99.         {
  100.             dist[v] = dist[u]+w;
  101.             if (dist[v]<=1e9*5000)
  102.             {
  103.                 f2 = true;
  104.             }
  105.         }
  106.     }
  107.     if (f1 and f2)
  108.     {
  109.         cout<<-1<<endl;
  110.         return 0;
  111.     }
  112.     else {
  113.         cout<<-store<<endl;
  114.         return 0;
  115.     }
  116.     return 0;
  117. }
  118. int main()
  119. {
  120.     ios::sync_with_stdio(false);
  121.     cin.tie(NULL);
  122.  
  123.  
  124.  
  125.     // #ifndef ONLINE_JUDGE
  126.     // freopen("input.txt", "r", stdin);
  127.     // freopen("output.txt", "w", stdout);
  128.     // #endif
  129.  
  130.  
  131.    
  132.     // tests(){solve();}
  133.     solve();
  134.     return 0;
  135. }
Add Comment
Please, Sign In to add comment