結果
問題 | No.2712 Play more! |
ユーザー | eom@🩵スト |
提出日時 | 2024-03-31 15:29:18 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 6,333 bytes |
コンパイル時間 | 6,546 ms |
コンパイル使用メモリ | 336,092 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-09-30 20:46:07 |
合計ジャッジ時間 | 7,149 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 1 ms
5,248 KB |
testcase_04 | WA | - |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 1 ms
5,248 KB |
testcase_07 | AC | 24 ms
5,248 KB |
testcase_08 | AC | 24 ms
5,248 KB |
testcase_09 | AC | 24 ms
5,248 KB |
testcase_10 | WA | - |
testcase_11 | AC | 17 ms
5,248 KB |
testcase_12 | AC | 16 ms
5,248 KB |
testcase_13 | AC | 15 ms
5,248 KB |
testcase_14 | AC | 24 ms
5,248 KB |
testcase_15 | AC | 45 ms
5,248 KB |
testcase_16 | AC | 11 ms
5,248 KB |
testcase_17 | AC | 4 ms
5,248 KB |
testcase_18 | AC | 7 ms
5,248 KB |
testcase_19 | AC | 4 ms
5,248 KB |
testcase_20 | AC | 24 ms
5,248 KB |
testcase_21 | AC | 14 ms
5,248 KB |
testcase_22 | AC | 19 ms
5,248 KB |
testcase_23 | AC | 7 ms
5,248 KB |
testcase_24 | AC | 9 ms
5,248 KB |
testcase_25 | AC | 5 ms
5,248 KB |
testcase_26 | AC | 6 ms
5,248 KB |
testcase_27 | AC | 10 ms
5,248 KB |
testcase_28 | AC | 7 ms
5,248 KB |
testcase_29 | AC | 9 ms
5,248 KB |
testcase_30 | AC | 41 ms
5,248 KB |
testcase_31 | AC | 30 ms
5,248 KB |
testcase_32 | AC | 24 ms
5,248 KB |
testcase_33 | AC | 2 ms
5,248 KB |
testcase_34 | AC | 2 ms
5,248 KB |
testcase_35 | AC | 2 ms
5,248 KB |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> // using namespace atcoder; using namespace std; typedef long long ll; typedef long double ld; using Graph = vector<vector<ll>>; using vi = vector<int>; using vll = vector<long long>; using vs = vector<string>; using pii = pair<int, int>; using pll = pair<long long, long long>; template <typename T> bool chmax(T &a, const T &b) { if (a < b) { a = b; return true; } return false; } template <typename T> bool chmin(T &a, const T &b) { if (a > b) { a = b; return true; } return false; } #define reps(i, a, n) for (ll i = (a); i < (ll)(n); ++i) #define rep(i, n) reps(i, 0, n) #define rrep(i, n) for (ll i = (ll)(n)-1; i >= 0; i--) #define ALL(box) (box).begin(), (box).end() #define all(box) (box).begin(), (box).end() #define RALL(box) (box).rbegin(), (box).rend() #define rall(box) (box).rbegin(), (box).rend() ll inf=((1LL<<62)-(1LL<<31)); ll sum = 0; ll num = 0; int pum = 0; ll mum = 0; int min1 = 1000000001; int max1 = 0; ll min2 = inf; ll max2 = -inf; ll MOD1 = 1000000007; ll MOD = 998244353; using mint = modint998244353; //using mint = modint1000000007; int dx[4] = {0, 1, 0, -1}; int dy[4] = {1, 0, -1, 0}; // 右、下、左、上 int dx8[8] = {0, 1, 1, 1, 0, -1, -1, -1}; int dy8[8] = {1, 1, 0, -1, -1, -1, 0, 1}; // sort(box.rbegin(), box.rend()); // printf("%.7Lf", n); // reverse(t.begin(), t.end()); // unique(box.begin(), box.end()); // auto It = lower_bound(ALL(box), n);以上 4 // auto It = upper_bound(ALL(box), n);含まない上 7 // cout << box.end() - It ; 末尾までの距離 // cout << It - a.begin() ; 先頭までの距離 // auto It =box.upper_bound( k);set,multiset // pqueue < int, vector<int>, greater<int>> q; // priority_queue<pii, vector<pii>, greater<pii>> pq;//小さい順 // segtree<ll, op, e> seg(N); // lazy_segtree<S, op, e, F, mapping, composition, id> seg(N); // box.erase(unique(all(box), box.end()); // st.erase(st.find(5)); ll zaatu(vector<ll>&A){map<ll,ll>m;for(auto&&x:A)m[x]=0;ll ret = 0;for(auto&&[key,val]:m)val=ret++;for(auto&&x:A)x=m[x];return ret;} void dei(const vector<int>& G){for(auto x:G){cout <<x<<" ";}cout <<endl;} void del(const vector<ll>& G) {for(auto x:G){cout <<x<<" ";}cout <<endl;} void dei2(const vector<vector<int>>& G){for(auto x:G){for(auto y:x){cout<<y<<" ";}cout <<endl;}cout <<endl;} void del2(const vector<vector<ll>>& G) {for(auto x:G){for(auto y:x){cout<<y<<" ";}cout <<endl;}cout <<endl;} void del2m(const vector<vector<mint>>& G) {for(auto x:G){for(auto y:x){cout<<y.val()<<" ";}cout <<endl;}cout <<endl;} void dec2(const vector<vector<char>>& G) {for(auto x:G){for(auto y:x){cout<<y<<" ";}cout <<endl;}cout <<endl;} void de3(const vector<vector<vector<ll>>>& G){for(auto x:G){for(auto y:x){for(auto z:y){cout<<z<<" ";}cout<<endl;}cout<<endl;}cout<<endl;} void Gnyu(Graph& G,int mukou_0_yuukou_1){ll a,b;cin>>a>>b;a--;b--;G[a].push_back(b);if(mukou_0_yuukou_1==0){G[b].push_back(a);}} struct edge{ ll to; ll leng; }; vector<ll> Dij(const vector<vector<edge>>& G,int first){ int N=G.size(); vector<ll> dist(N,inf);//最短経路を保存 priority_queue<pll, vector<pll>, greater<pll>> pq; vector<bool> ok(N,false);//確定させる dist[first]=0;//最初の地点は0 pq.push({dist[first],first});//最初の地点から行う while(!pq.empty()){ ll n,m; tie(n,m)=pq.top(); pq.pop();//取り出し、捨てる if(ok[m]==false){//すでに確定されてないなら ok[m]=true;//確定させて dist[m]=n;//最短経路も確定させる。 for(auto x:G[m]){//その場所からいけるすべての場所を入れて、 if(ok[x.to]==false){//もしまだ確定されていないなら pq.push({dist[m]+x.leng,x.to});//{最短経路,その頂点を格納} } } } } //for(auto x:dist) cout <<x<<" "; //cout <<endl; return dist;//最短経路を返す。行けない場合はinf } ll MAX_MIN_K(vector<ll> box,ll K){ sort(all(box)); //del(box); int N=box.size(); ll min3=inf; rep(i,N-K+1){ min3=min(min3,abs(box[K+i-1]-box[i])); } return min3; } ld menseki(ld x1,ld y1,ld x2,ld y2,ld x3,ld y3){ return abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2; } ld you(ld x1, ld y1, ld x2, ld y2) { return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); } ll power(ll a, ll b, ll m) { ll p = a, ans = 1; for(int i = 0; i < 63; i++) { ll wari = (1LL << i); if((b / wari) % 2 == 1) { ans = (ans * p) % m; } p = (p * p) % m; } return ans; }//a^b(mod m)を求める mint ans=0; ll N,M,K; void dfs(vector<mint>& box,int nest,mint sum,int kazu){ if(nest==N){ cout <<kazu<<" "<<sum.val()<<endl; if(K<=kazu){ ans+=sum; } return ; } rep(i,box.size()){ dfs(box,nest+1,sum*box[i],kazu+i); } } bool Bellman_Ford(vector<tuple<ll,ll,ll>>& hen,vector<ll>& dist,int first){ int N=dist.size(); int M=hen.size(); rep(i,N){ if(i==first){ dist[i]=0; } else{ dist[i]=inf; } } rep(i,N){ bool ok=false; rep(j,M){ ll n,m,w; tie(n,m,w)=hen[j]; if(dist[n]==inf) continue; if(chmin(dist[m],dist[n]+w)){ ok=true; } } if(i==N-1){ if(ok){ return true; } else{ return false; } } } return false; }//辺をN-1調査し、N回目でも変更があるなら、true(不閉路がある) //たどり着けない場合は INF になる //辺のu->v-wのtuple,何でもよい頂点数のdist,最初の頂点を送る int main(){ ll N,M; cin>>N>>M; vector<ll> box(N); rep(i,N){ cin>>box[i]; }vector<tuple<ll,ll,ll>> G; rep(i,M){ ll a,b,c; cin>>a>>b>>c; a--;b--; G.push_back({a,b,c-box[b]}); } vector<ll> dist(N); bool ok=Bellman_Ford(G,dist,0); if(ok){ cout <<"inf"<<endl; return 0; } else{ cout <<max(0LL,dist[N-1]*-1+box[0])<<endl; } }