結果
問題 | No.2477 Drifting |
ユーザー | Yerin Jung |
提出日時 | 2023-09-23 21:42:55 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 414 ms / 2,000 ms |
コード長 | 1,676 bytes |
コンパイル時間 | 2,749 ms |
コンパイル使用メモリ | 186,328 KB |
実行使用メモリ | 61,416 KB |
最終ジャッジ日時 | 2024-07-16 21:32:05 |
合計ジャッジ時間 | 7,899 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 333 ms
60,928 KB |
testcase_01 | AC | 159 ms
53,180 KB |
testcase_02 | AC | 264 ms
61,416 KB |
testcase_03 | AC | 92 ms
37,796 KB |
testcase_04 | AC | 68 ms
35,908 KB |
testcase_05 | AC | 85 ms
33,812 KB |
testcase_06 | AC | 414 ms
60,600 KB |
testcase_07 | AC | 380 ms
59,904 KB |
testcase_08 | AC | 295 ms
56,420 KB |
testcase_09 | AC | 118 ms
54,940 KB |
testcase_10 | AC | 130 ms
52,712 KB |
testcase_11 | AC | 122 ms
54,312 KB |
testcase_12 | AC | 159 ms
53,744 KB |
testcase_13 | AC | 11 ms
32,228 KB |
testcase_14 | AC | 10 ms
32,228 KB |
testcase_15 | AC | 10 ms
32,228 KB |
testcase_16 | AC | 116 ms
53,092 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define fi first #define se second const ll mod=998244353; const int N=2e5+5; ll n,m,k,z,y; int eu[N],ev[N]; ll ew[N]; ll d[N]; vector<pair<int,int> >in[N],out[N]; int sz=0; vector<int>g[N]; map<int,vector<int> >ban[N]; ll jp[N]; ll mn[1<<19]; void build(int id,int l,int r){ if(l==r){ mn[id]=d[in[y][l-1].se]; return; } int mid=(l+r)/2; build(id*2,l,mid); build(id*2+1,mid+1,r); mn[id]=min(mn[id*2],mn[id*2+1]); } ll qry(int id,int l,int r,int ql,int qr){ if(l>qr || r<ql) return 1e18; if(ql<=l && r<=qr) return mn[id]; int mid=(l+r)/2; return min(qry(id*2,l,mid,ql,qr),qry(id*2+1,mid+1,r,ql,qr)); } int main(){ ios::sync_with_stdio(false);cin.tie(0); cin >> n >> m; for(int i=1; i<=m ;i++){ int u,v;ll w;cin >> u >> v >> w; eu[i]=u;ev[i]=v;ew[i]=w; in[v].push_back({u,i}); out[u].push_back({v,i}); d[i]=1e18; } in[1].push_back({0,0}); cin >> k; for(int i=1; i<=k ;i++){ int a,b,c;cin >> a >> b >> c; ban[b][c].push_back(a); } ll res=1e18; for(int i=1; i<=n ;i++){ if(in[i].empty()) continue; y=i; sort(in[i].begin(),in[i].end()); z=in[i].size(); for(int j=0; j<in[i].size() ;j++){ jp[in[i][j].fi]=j+1; } build(1,1,z); for(auto c:out[i]){ auto &v=ban[i][c.fi]; vector<int>g; for(auto d:v){ if(jp[d]!=0) g.push_back(jp[d]); } sort(g.begin(),g.end()); int prv=0; ll cur=1e18; for(auto d:g){ if(prv+1<d) cur=min(cur,qry(1,1,z,prv+1,d-1)); prv=d; } if(prv+1<=z) cur=min(cur,qry(1,1,z,prv+1,z)); d[c.se]=cur+ew[c.se]; if(c.fi==n) res=min(res,d[c.se]); } } if(res==1e18) res=-1; cout << res << '\n'; }