結果
問題 | No.614 壊れたキャンパス |
ユーザー |
![]() |
提出日時 | 2017-12-14 14:59:35 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 963 ms / 2,000 ms |
コード長 | 1,627 bytes |
コンパイル時間 | 1,394 ms |
コンパイル使用メモリ | 101,132 KB |
実行使用メモリ | 70,396 KB |
最終ジャッジ日時 | 2024-12-14 13:06:54 |
合計ジャッジ時間 | 11,469 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 |
ソースコード
#include<algorithm>#include<iostream>#include<map>#include<queue>#include<vector>using namespace std;typedef long long lint;typedef vector<int>vi;typedef pair<int,int>pii;typedef pair<lint,int>pli;#define rep(i,n)for(int i=0;i<int(n);++i)#define I (1LL<<53)#define N 210000map<pii,int>bank;vector<pii>sky[N];vector<vector<pii> >g;int regist(int a,int b){if(bank.count(pii(a,b))){return bank[pii(a,b)];}int s=bank.size();bank[pii(a,b)]=s;sky[a].push_back(pii(b,s));return s;}int main(){int n,m,k,s,t;cin>>n>>m>>k>>s>>t;vi ds(m),es(m);rep(i,m){int a,b,c;cin>>a>>b>>c;a--;int d=regist(a,b);int e=regist(a+1,c);ds[i]=d;es[i]=e;}int si=regist(0,s);int ti=regist(n-1,t);int gs=bank.size();g=vector<vector<pii> >(gs);rep(i,n){sort(sky[i].begin(),sky[i].end());if(sky[i].size()==0)continue;rep(j,sky[i].size()-1){pii vvh=sky[i][j];int v=vvh.second;int vh=vvh.first;pii wwh=sky[i][j+1];int w=wwh.second;int wh=wwh.first;g[v].push_back(pii(w,wh-vh));g[w].push_back(pii(v,wh-vh));}}rep(i,m)g[ds[i]].push_back(pii(es[i],0));vector<lint>dis(gs,I);priority_queue<pli,vector<pli>,greater<pli> >q;q.push(pli(0,si));while(q.size()>0){pli dw=q.top();q.pop();lint d=dw.first;int v=dw.second;if(dis[v]<=d)continue;dis[v]=d;for(pii e:g[v]){int w=e.first;long nd=d+e.second;if(dis[w]<=nd)continue;dis[w]=nd+1;q.push(pli(nd,w));}}cout<<(dis[ti]==I?-1:dis[ti])<<endl;}