結果
問題 | No.2477 Drifting |
ユーザー |
|
提出日時 | 2023-09-23 21:42:55 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.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 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 |
ソースコード
#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi first#define se secondconst 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';}