# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
639024 |
2022-09-08T09:46:59 Z |
danikoynov |
Robot (JOI21_ho_t4) |
C++14 |
|
1716 ms |
162444 KB |
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
struct edge
{
int ver;
ll len;
edge(int _ver = 0, ll _len = 0)
{
ver = _ver;
len = _len;
}
bool operator < (const edge &e) const
{
return len > e.len;
}
};
const int maxn = 2e6 + 10;
int n, m, nxt;
map < pair < int, int >, int > mp;
map < pair < int, int >, ll > sum;
vector < edge > g[maxn];
int mp_idx(int v, int c)
{
if (mp.find(make_pair(v, c)) == mp.end())
mp[make_pair(v, c)] = ++ nxt;
return mp[make_pair(v, c)];
}
struct road
{
int v, u, c, p;
road(int _v = 0, int _u = 0, int _c = 0, int _p = 0)
{
v = _v;
u = _u;
c = _c;
p = _p;
}
}r[maxn];
const ll inf = 1e18;
ll d[maxn];
int used[maxn];
void add_edge(int v, edge e)
{
g[v].push_back(e);
///cout << v << " " << e.ver << " " << e.len << endl;
}
void solve()
{
cin >> n >> m;
nxt = n;
for (int i = 1; i <= m; i ++)
{
int v, u, c, p;
cin >> v >> u >> c >> p;
r[i] = road(v, u, c, p);
for (int t = 0; t < 2; t ++)
{
swap(v, u);
///g[v].push_back(edge(u, p));
add_edge(v, edge(u, p));
add_edge(v, edge(mp_idx(u, c), 0));
///g[v].push_back(edge(mp_idx(u, c), 0));
///cout << "to_add " << v << " " << c << " " << p << endl;
sum[make_pair(v, c)] += p;
}
}
map < pair < int, int >, int > :: iterator it;
for (int i = 1; i <= m; i ++)
{ int v = r[i].v, u = r[i].u, c = r[i].c, p = r[i].p;
for (int t = 0; t < 2; t ++)
{
swap(v, u);
add_edge(v, edge(u, sum[make_pair(v, c)] - p));
add_edge(mp_idx(v, c), edge(u, sum[make_pair(v, c)] - p));
}
}
/**for (it = mp.begin(); it != mp.end(); it ++)
{
pair < int, int > cur = it -> first;
for (int j = 0; j < g[cur.first].size(); j ++)
{
int ver = g[cur.first][j].ver;
if (ver <= n)
{
///g[mp_idx(cur.first, cur.second)].push_back(edge(ver, sum[cur] - g[cur.first][j].len));
cout << cur.first << " :: " << cur.second << " :: " << sum[cur] << " " << g[cur.first][j].len << endl;
add_edge(mp_idx(cur.first, cur.second), edge(ver, sum[cur] - g[cur.first][j].len));
}
}
}*/
for (int i = 1; i <= m; i ++)
{
int v = r[i].v, u = r[i].u, c = r[i].c, p = r[i].p;
for (int t = 0; t < 2; t ++)
{
swap(v, u);
if (sum[make_pair(v, c)] == p)
{
///g[v].push_back(edge(u, 0));
add_edge(v, edge(u, 0));
}
}
}
for (int i = 1; i <= nxt; i ++)
d[i] = inf;
priority_queue < edge > pq;
pq.push(edge(1, 0));
d[1] = 0;
while(!pq.empty())
{
edge e = pq.top();
pq.pop();
if (d[e.ver] >= e.len)
if (!used[e.ver])
{
used[e.ver] = 1;
for (int j = 0; j < g[e.ver].size(); j ++)
{
edge nb = g[e.ver][j];
nb.len += e.len;
if (nb.len < d[nb.ver])
{
d[nb.ver] = nb.len;
pq.push(nb);
}
}
}
}
if (d[n] == inf)
cout << -1 << endl;
else
cout << d[n] << endl;
}
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
int main()
{
///freopen("input.txt", "r", stdin);
speed();
solve();
return 0;
}
Compilation message
Main.cpp: In function 'void solve()':
Main.cpp:137:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<edge>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
137 | for (int j = 0; j < g[e.ver].size(); j ++)
| ~~^~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
78540 KB |
Output is correct |
2 |
Correct |
34 ms |
78616 KB |
Output is correct |
3 |
Correct |
35 ms |
78548 KB |
Output is correct |
4 |
Correct |
36 ms |
78496 KB |
Output is correct |
5 |
Correct |
37 ms |
78540 KB |
Output is correct |
6 |
Correct |
38 ms |
78668 KB |
Output is correct |
7 |
Correct |
39 ms |
78804 KB |
Output is correct |
8 |
Correct |
36 ms |
78708 KB |
Output is correct |
9 |
Correct |
47 ms |
79384 KB |
Output is correct |
10 |
Correct |
42 ms |
79328 KB |
Output is correct |
11 |
Correct |
39 ms |
79196 KB |
Output is correct |
12 |
Correct |
39 ms |
78968 KB |
Output is correct |
13 |
Correct |
38 ms |
79204 KB |
Output is correct |
14 |
Correct |
39 ms |
79180 KB |
Output is correct |
15 |
Correct |
39 ms |
78864 KB |
Output is correct |
16 |
Correct |
41 ms |
79096 KB |
Output is correct |
17 |
Correct |
45 ms |
79104 KB |
Output is correct |
18 |
Correct |
37 ms |
78752 KB |
Output is correct |
19 |
Correct |
38 ms |
78976 KB |
Output is correct |
20 |
Correct |
39 ms |
79024 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
463 ms |
104432 KB |
Output is correct |
2 |
Correct |
207 ms |
91144 KB |
Output is correct |
3 |
Correct |
550 ms |
110476 KB |
Output is correct |
4 |
Correct |
284 ms |
95724 KB |
Output is correct |
5 |
Correct |
1667 ms |
156952 KB |
Output is correct |
6 |
Correct |
1423 ms |
150588 KB |
Output is correct |
7 |
Correct |
790 ms |
138516 KB |
Output is correct |
8 |
Correct |
1317 ms |
138076 KB |
Output is correct |
9 |
Correct |
1298 ms |
138220 KB |
Output is correct |
10 |
Correct |
901 ms |
124360 KB |
Output is correct |
11 |
Correct |
561 ms |
111464 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
35 ms |
78540 KB |
Output is correct |
2 |
Correct |
34 ms |
78616 KB |
Output is correct |
3 |
Correct |
35 ms |
78548 KB |
Output is correct |
4 |
Correct |
36 ms |
78496 KB |
Output is correct |
5 |
Correct |
37 ms |
78540 KB |
Output is correct |
6 |
Correct |
38 ms |
78668 KB |
Output is correct |
7 |
Correct |
39 ms |
78804 KB |
Output is correct |
8 |
Correct |
36 ms |
78708 KB |
Output is correct |
9 |
Correct |
47 ms |
79384 KB |
Output is correct |
10 |
Correct |
42 ms |
79328 KB |
Output is correct |
11 |
Correct |
39 ms |
79196 KB |
Output is correct |
12 |
Correct |
39 ms |
78968 KB |
Output is correct |
13 |
Correct |
38 ms |
79204 KB |
Output is correct |
14 |
Correct |
39 ms |
79180 KB |
Output is correct |
15 |
Correct |
39 ms |
78864 KB |
Output is correct |
16 |
Correct |
41 ms |
79096 KB |
Output is correct |
17 |
Correct |
45 ms |
79104 KB |
Output is correct |
18 |
Correct |
37 ms |
78752 KB |
Output is correct |
19 |
Correct |
38 ms |
78976 KB |
Output is correct |
20 |
Correct |
39 ms |
79024 KB |
Output is correct |
21 |
Correct |
463 ms |
104432 KB |
Output is correct |
22 |
Correct |
207 ms |
91144 KB |
Output is correct |
23 |
Correct |
550 ms |
110476 KB |
Output is correct |
24 |
Correct |
284 ms |
95724 KB |
Output is correct |
25 |
Correct |
1667 ms |
156952 KB |
Output is correct |
26 |
Correct |
1423 ms |
150588 KB |
Output is correct |
27 |
Correct |
790 ms |
138516 KB |
Output is correct |
28 |
Correct |
1317 ms |
138076 KB |
Output is correct |
29 |
Correct |
1298 ms |
138220 KB |
Output is correct |
30 |
Correct |
901 ms |
124360 KB |
Output is correct |
31 |
Correct |
561 ms |
111464 KB |
Output is correct |
32 |
Correct |
429 ms |
111816 KB |
Output is correct |
33 |
Correct |
440 ms |
110388 KB |
Output is correct |
34 |
Correct |
978 ms |
128072 KB |
Output is correct |
35 |
Correct |
732 ms |
117492 KB |
Output is correct |
36 |
Correct |
789 ms |
122912 KB |
Output is correct |
37 |
Correct |
796 ms |
130552 KB |
Output is correct |
38 |
Correct |
818 ms |
143176 KB |
Output is correct |
39 |
Correct |
519 ms |
121036 KB |
Output is correct |
40 |
Correct |
1336 ms |
139432 KB |
Output is correct |
41 |
Correct |
1346 ms |
139692 KB |
Output is correct |
42 |
Correct |
1419 ms |
143276 KB |
Output is correct |
43 |
Correct |
581 ms |
112460 KB |
Output is correct |
44 |
Correct |
1006 ms |
131812 KB |
Output is correct |
45 |
Correct |
1027 ms |
127996 KB |
Output is correct |
46 |
Correct |
927 ms |
128248 KB |
Output is correct |
47 |
Correct |
800 ms |
127496 KB |
Output is correct |
48 |
Correct |
1716 ms |
162444 KB |
Output is correct |