#include #include #include using namespace std; vector bfs(int n,int m,vector>rotti,int start){ vectorstack{start}; int iti=0,hako; setirane{start}; while (stack.size()>iti){ hako=stack[iti]; for (int i=0;i0)continue; irane.insert(rotti[hako-1][i]); stack.emplace_back(rotti[hako-1][i]); } iti++; } vectorans(n,0); //連結してるなら1 for (int i=0;i0)ans[i]=1; return ans; } vector dijkstra_negative(int n,int m,vector>>graph,int start,vectornum){ //連結じゃない頂点には手をださない //vectornumの中身はそれぞれの頂点がスタート地点から連結かどうか(連結なら1) vectoramount(n,1e12); int check; amount[start-1]=0; for (int q=0;q> n >> m; vectorA(n); vector>>graph(n); vector>graph2(n); for(int i=0;i> A[i]; for(int i=0;i> a >> b >> c; graph[a-1].push_back({b,c-A[b-1]}); graph2[a-1].emplace_back(b); } vectornum=bfs(n,m,graph2,1); vectoramount=dijkstra_negative(n,m,graph,1,num); if(amount[0]==-1)cout << "inf" << endl; else cout << amount[n-1]*(long long)-1+(long long)A[0] << endl; }