結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
myanta
|
| 提出日時 | 2017-04-30 07:41:08 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,597 bytes |
| コンパイル時間 | 534 ms |
| コンパイル使用メモリ | 48,000 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-08 04:51:30 |
| 合計ジャッジ時間 | 1,568 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 15 WA * 25 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:88:51: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
88 | for(int i=0;i<v;i++) scanf("%d", &vs[i]);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:89:51: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
89 | for(int i=0;i<v;i++) scanf("%d", &vt[i]);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:90:51: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
90 | for(int i=0;i<v;i++) scanf("%d", &vy[i]);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:91:51: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
91 | for(int i=0;i<v;i++) scanf("%d", &vm[i]);
| ~~~~~^~~~~~~~~~~~~~
ソースコード
#include<cstdio>
#include<vector>
using namespace std;
struct state_t
{
int c, t;
};
struct road_t
{
state_t s;
int to;
};
struct city_t
{
vector<road_t> road;
vector<state_t> state;
};
vector<city_t> city;
int state_add(vector<state_t>& s, int c, int t)
{
vector<int> remove;
int is_add=0;
for(int i=s.size()-1;i>=0;i--)
{
if(c>s[i].c && t<=s[i].t)
{
remove.push_back(i);
is_add=1;
}
else if(c>=s[i].c && t<s[i].t)
{
remove.push_back(i);
is_add=1;
}
}
if(s.size()==0) is_add=1;
for(unsigned i=0;i<remove.size();i++)
{
s.erase(s.begin()+remove[i]);
}
if(is_add) s.push_back((state_t){c, t});
return is_add;
}
void solve(int x, int c, int t)
{
if(state_add(city[x].state, c, t)==0) return;
vector<road_t>& road=city[x].road;
for(unsigned i=0;i<road.size();i++)
{
if(c-road[i].s.c<0) continue;
solve(road[i].to, c-road[i].s.c, t+road[i].s.t);
}
}
int main(void)
{
int n, c, v;
while(scanf("%d%d%d", &n, &c, &v)==3)
{
city.clear();
city.resize(n+1);
{
vector<int> vs, vt, vy, vm;
vs.resize(v);
vt.resize(v);
vy.resize(v);
vm.resize(v);
for(int i=0;i<v;i++) scanf("%d", &vs[i]);
for(int i=0;i<v;i++) scanf("%d", &vt[i]);
for(int i=0;i<v;i++) scanf("%d", &vy[i]);
for(int i=0;i<v;i++) scanf("%d", &vm[i]);
for(int i=0;i<v;i++)
{
city[vs[i]].road.push_back((road_t){{vy[i], vm[i]}, vt[i]});
}
}
solve(1, c, 0);
int t=-1;
for(unsigned i=0;i<city[n].state.size();i++)
{
state_t& s=city[n].state[i];
if(i==0 || t>s.t) t=s.t;
}
printf("%d\n", t);
}
return 0;
}
myanta