Advertisement
Guest User

Untitled

a guest
Aug 26th, 2017
686
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. #define mp make_pair
  5. #define pb push_back
  6. #define lp(i,a,n) for(int i=(a);i<=(int)(n);++i)
  7. #define lpd(i,a,n) for(int i=(a);i>=(int)(n);--i)
  8. #define mem(a,b) memset(a,b,sizeof a)
  9. #define all(v) v.begin(),v.end()
  10. #define println(a) cout <<(a) <<endl
  11. #define sz(x) ((int)(x).size())
  12. #define readi(x) scanf("%d",&x)
  13. #define read2i(x,y) scanf("%d%d",&x,&y)
  14. #define read3i(x,y,z) scanf("%d%d%d",&x,&y,&z)
  15. #define mod 1000000007
  16. #define eps 1e-8
  17. #define infi 1000000000
  18. #define infll 1000000000000000000ll
  19. using namespace std;
  20. typedef long long ll;
  21. typedef pair<int,int> pii;
  22. typedef pair<ll,ll> pll;
  23. typedef vector<int> vi;
  24. typedef vector<vi> vvi;
  25. typedef vector<ll> vll;
  26. typedef set<int> si;
  27. typedef map<int,int> mii;
  28.  
  29. const int N = 2002;
  30. int t,n,m;
  31. ll dp[N],dist[N];
  32. struct edge {int fr,to,w;};
  33. vector<edge> edges;
  34. vector<vector<pair<int,int>>> g(N);
  35.  
  36. ll dfs(int i){
  37. if(dp[i] != infll) return dp[i];
  38. dp[i] = infll-1;
  39. ll ret = infll;
  40. for(pair<int,int> p : g[i]) ret = min(ret, p.s + dfs(p.f) * (dfs(p.f) < 0));
  41. return dp[i] = ret;
  42. }
  43.  
  44. bool negCycle(int src){
  45. lp(i,1,n) dist[i] = infll;
  46. dist[src] = 0;
  47.  
  48. lp(i,1,n-1){
  49. bool relax = false;
  50. for(edge e : edges){
  51. if(dist[e.fr] + e.w < dist[e.to]){
  52. dist[e.to] = dist[e.fr] + e.w;
  53. relax = true;
  54. }
  55. }
  56. if(!relax) break;
  57. }
  58. for(edge e : edges){
  59. if(dist[e.fr] + e.w < dist[e.to])
  60. return true;
  61. }
  62. return false;
  63. }
  64.  
  65. int main(){
  66. readi(t);
  67. while(t--) {
  68. read2i(n,m);
  69. lp(i,1,m){
  70. int a,b,c;
  71. read3i(a,b,c);
  72. edges.pb({a,b,c});
  73. }
  74.  
  75. if(negCycle(1)) puts("-inf");
  76. else{
  77. ll ans = infll;
  78. for(edge e : edges){
  79. ans = min(ans, 1ll*e.w);
  80. g[e.fr].pb({e.to, e.w});
  81. }
  82.  
  83. lp(i,1,n){
  84. lp(j,1,n) dp[j] = infll;
  85. ans = min(ans, dfs(i));
  86. }
  87. printf("%I64d\n",ans);
  88. }
  89.  
  90. edges.clear();
  91. g.clear();
  92. g.resize(N);
  93. }
  94. }
  95.  
  96. /*
  97. freopen("input.txt","r",stdin);
  98. freopen("output.txt","w",stdout);
  99. ios::sync_with_stdio(0);cin.tie(0);
  100. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement