Submission #377289

#TimeUsernameProblemLanguageResultExecution timeMemory
377289YJURobot (JOI21_ho_t4)C++14
100 / 100
1100 ms82992 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long int n, m; struct node { ll dis; int u, c; node() {} node(int _u, int _c, ll _d) { u = _u, c = _c, dis = _d; } friend bool operator < (node a, node b) { return a.dis > b.dis; } }; priority_queue<node> Q; const int maxn = 100005; const int maxm = 400005; int last[maxn], Next[maxm], to[maxm], w[maxm], col[maxm], cnt; unordered_map <int, ll> Map[maxn], sum[maxn]; unordered_map <int, vector<pair<int, int> > > out[maxn]; inline void addedge(int x, int y, int z, int c) { Next[++cnt] = last[x], last[x] = cnt; to[cnt] = y, w[cnt] = z, col[cnt] = c; out[x][c].push_back(make_pair(y, z)); sum[x][c] += z; } int main() { scanf("%d%d", &n, &m); for(int i = 1, x, y, z, c; i <= m; i++) { scanf("%d%d%d%d", &x, &y, &c, &z); addedge(x, y, z, c), addedge(y, x, z, c); } auto check = [=] (int u, int c, ll dis) -> void { if(!Map[u].count(c) || Map[u][c] > dis) Map[u][c] = dis, Q.push(node(u, c, dis)); }; check(1, 0, 0); while(!Q.empty()) { node tmp = Q.top(); Q.pop(); int u = tmp.u, c = tmp.c; ll dis = tmp.dis; if(Map[u][c] != dis) continue; if(!c) { for(int i = last[u]; i; i = Next[i]) { int v = to[i]; check(v, col[i], dis); check(v, 0, dis + min(sum[u][col[i]] - w[i], (ll)w[i])); } } else { if(out[u].count(c)) { for(auto tp : out[u][c]) { int v = tp.first, w = tp.second; check(v, 0, dis + sum[u][c] - w); } } } } Map[n].count(0) ? printf("%lld\n", Map[n][0]) : puts("-1"); return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:30:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   30 |  scanf("%d%d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~
Main.cpp:32:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   32 |   scanf("%d%d%d%d", &x, &y, &c, &z);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...