QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#91293 | #4382. Path | Tobo | AC ✓ | 548ms | 64488kb | C++20 | 2.0kb | 2023-03-28 11:24:46 | 2023-03-28 11:24:49 |
Judging History
answer
#include <bits/stdc++.h>
#define N 1000005
using i64 = long long;
using namespace std;
int n, m, s, k, vis[2][N];
i64 dis[2][N];
vector<array<int, 3>> adj[N];
struct node
{
int type, x;
i64 dis;
bool operator<(const node &tmp) const { return dis > tmp.dis; }
};
void solve()
{
cin >> n >> m >> s >> k;
set<int> st;
for (int i = 1; i <= n; i++)
st.insert(i);
for (int i = 1, u, v, w, r; i <= m; i++)
{
cin >> u >> v >> w >> r;
adj[u].push_back({v, w, r});
}
priority_queue<node> que;
que.push({0, s, 0});
fill(dis[0] + 1, dis[0] + n + 1, 1e18);
fill(dis[1] + 1, dis[1] + n + 1, 1e18);
fill(vis[0] + 1, vis[0] + n + 1, 0);
fill(vis[1] + 1, vis[1] + n + 1, 0);
dis[0][s] = 0;
vector<int> col(n + 1);
while (!que.empty())
{
auto [p, cur, _] = que.top();
que.pop();
if (vis[p][cur])
continue;
vis[p][cur] = 1;
st.erase(cur);
if (p)
{
for (const auto &[i, _, _1] : adj[cur])
col[i] = cur;
for (int i : st)
{
if (col[i] != cur)
{
dis[0][i] = dis[p][cur];
que.push({0, i, dis[0][i]});
}
}
}
int d = p ? -k : 0;
for (auto &t : adj[cur])
{
if (dis[t[2]][t[0]] > dis[p][cur] + d + t[1])
{
dis[t[2]][t[0]] = dis[p][cur] + d + t[1];
que.push({t[2], t[0], dis[t[2]][t[0]]});
}
}
}
for (int i = 1; i <= n; i++)
{
i64 ans = min(dis[0][i], dis[1][i]);
if (ans == 1e18)
ans = -1;
cout << ans << ' ';
adj[i].clear();
}
cout << '\n';
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
cin >> t;
while (t--)
solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 548ms
memory: 64488kb
input:
13 10 30 2 18468 5 1 37637 0 9 9 45430 0 6 6 41749 0 2 2 21463 1 8 7 50859 0 3 4 18760 0 2 7 38186 0 8 7 33239 0 10 3 44135 0 6 5 47171 0 3 4 36141 0 2 2 46721 0 8 5 51130 0 8 10 27191 0 10 9 30784 0 1 3 18756 0 1 3 37732 0 7 6 34358 0 1 1 33474 0 4 9 38097 0 5 5 37224 0 7 7 32399 0 5 10 43094 0 8 9...
output:
21463 0 21463 21463 21463 45392 38186 21463 21463 21463 41923 0 45987 49920 18690 52316 71251 52316 25059 52316 57062 34860 18647 36256 49111 29152 32554 62744 0 38939 56122 64474 0 -1 84001 29542 39504 -1 -1 38273 46451 44825 44825 44825 57660 38488 44825 44825 44825 0 51281 91636 44602 39997 ...
result:
ok 13 lines