結果
問題 | No.2805 Go to School |
ユーザー | Kou0406 |
提出日時 | 2024-07-20 12:52:20 |
言語 | C++23(gcc13) (gcc 13.2.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 259 ms / 2,000 ms |
コード長 | 2,204 bytes |
コンパイル時間 | 4,670 ms |
コンパイル使用メモリ | 104,472 KB |
実行使用メモリ | 39,720 KB |
最終ジャッジ日時 | 2024-07-20 12:52:34 |
合計ジャッジ時間 | 10,738 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
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 | 2 ms
5,376 KB |
testcase_04 | AC | 89 ms
15,360 KB |
testcase_05 | AC | 190 ms
25,520 KB |
testcase_06 | AC | 52 ms
9,996 KB |
testcase_07 | AC | 81 ms
21,204 KB |
testcase_08 | AC | 124 ms
26,212 KB |
testcase_09 | AC | 69 ms
14,784 KB |
testcase_10 | AC | 103 ms
14,868 KB |
testcase_11 | AC | 251 ms
20,200 KB |
testcase_12 | AC | 157 ms
15,096 KB |
testcase_13 | AC | 259 ms
21,764 KB |
testcase_14 | AC | 23 ms
5,888 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | AC | 2 ms
5,376 KB |
testcase_17 | AC | 2 ms
5,376 KB |
testcase_18 | AC | 77 ms
13,364 KB |
testcase_19 | AC | 77 ms
10,708 KB |
testcase_20 | AC | 234 ms
26,032 KB |
testcase_21 | AC | 227 ms
19,704 KB |
testcase_22 | AC | 71 ms
10,768 KB |
testcase_23 | AC | 118 ms
18,068 KB |
testcase_24 | AC | 231 ms
24,448 KB |
testcase_25 | AC | 44 ms
10,284 KB |
testcase_26 | AC | 104 ms
28,968 KB |
testcase_27 | AC | 95 ms
13,524 KB |
testcase_28 | AC | 8 ms
5,632 KB |
testcase_29 | AC | 13 ms
6,400 KB |
testcase_30 | AC | 47 ms
9,984 KB |
testcase_31 | AC | 132 ms
12,216 KB |
testcase_32 | AC | 244 ms
39,720 KB |
testcase_33 | AC | 242 ms
21,188 KB |
testcase_34 | AC | 2 ms
5,376 KB |
testcase_35 | AC | 2 ms
5,376 KB |
testcase_36 | AC | 91 ms
11,148 KB |
testcase_37 | AC | 78 ms
9,088 KB |
testcase_38 | AC | 138 ms
13,380 KB |
ソースコード
#include<iostream> #include<vector> #include<queue> #define rep(i,n) for(i=0;i<(int)(n);i++) #define NIL -1 using namespace std; typedef long long ll; typedef struct point{ int p; ll t; point(int pp=0,ll tt=0):p(pp),t(tt){} }Point; typedef struct data{ int p; ll t; bool tol; data(int pp=0,ll tt=0,bool ttol=false):p(pp),t(tt),tol(ttol){} bool operator<(const data& k)const{ return t<k.t; } }Data; int n,m,l,s,e; vector<vector<Point> > adj; vector<bool> tol; ll dijk(){ Data now,nxt; vector<vector<bool> > visited(2,vector<bool>(n,false)); priority_queue<Data> PQ; PQ.push(Data(0,0,false)); if(tol[0]) PQ.push(Data(0,-s-1,true)); while(PQ.size()){ do{ now=PQ.top();PQ.pop(); }while(PQ.size()&&visited[now.tol][now.p]); if(visited[now.tol][now.p]) break; //printf("now:(%d,%lld,%d)\n",now.p,-now.t,now.tol?1:0); if(now.tol&&now.p==n-1) return -now.t; visited[now.tol][now.p]=true; for(Point x:adj[now.p]){ nxt.p=x.p; nxt.t=now.t-x.t; nxt.tol=now.tol; if(visited[nxt.tol][nxt.p]==false){ PQ.push(nxt); //printf("new:(%d,%lld,%d)\n",nxt.p,-nxt.t,nxt.tol?1:0); } if(nxt.tol==false&&tol[nxt.p]){ nxt.tol=true; if(s>-nxt.t){ nxt.t=-s-1; }else if(-nxt.t<s+e){ nxt.t--; }else continue; } if(visited[nxt.tol][nxt.p]==false){ PQ.push(nxt); //printf("new:(%d,%lld,%d)\n",nxt.p,-nxt.t,nxt.tol?1:0); } } } return NIL; } int main(){ int i,j,k; scanf("%d%d%d%d%d",&n,&m,&l,&s,&e); tol=vector<bool>(n,false); adj=vector<vector<Point> >(n); while(m--){ scanf("%d%d%d",&i,&j,&k); i--;j--; adj[i].push_back(Point(j,k)); adj[j].push_back(Point(i,k)); } while(l--){ scanf("%d",&i); i--; tol[i]=true; } printf("%lld\n",dijk()); return 0; }