Submission #985382

#TimeUsernameProblemLanguageResultExecution timeMemory
985382underwaterkillerwhaleRobot (JOI21_ho_t4)C++17
34 / 100
301 ms42836 KiB
#include <bits/stdc++.h> #define se second #define fs first #define mp make_pair #define pb push_back #define ll long long #define ii pair<ll,ll> #define ld long double #define SZ(v) (int)v.size() #define ALL(v) v.begin(), v.end() #define bit(msk, i) ((msk >> i) & 1) #define iter(id, v) for(auto id : v) #define rep(i,m,n) for(int i=(m); i<=(n); i++) #define reb(i,m,n) for(int i=(m); i>=(n); i--) using namespace std; mt19937_64 rd(chrono :: steady_clock :: now().time_since_epoch().count()); ll Rand(ll l, ll r) { return uniform_int_distribution<ll> (l, r)(rd); } const int N = 1e5 + 7; const ll Mod = 1e9 + 7; const int szBL = 916; const ll INF = 1e18; const int BASE = 1337; struct toData { ll v, C, P, eid; }; struct DataE { ll u, v, C, P; }; int n, m; map<int, ll> dp[N]; DataE Edge[N]; vector<toData> ke[N]; int color[N]; ll costcol[N]; void solution () { cin >> n >> m; rep (i, 1, m) { ll u, v, C, P; cin >> u >> v >> C >> P; Edge[i] = {u, v, C, P}; ke[u].push_back({v, C, P, i}); ke[v].push_back({u, C, P, i}); color[i] = C; } if (m == 1) { bool ok = 0; rep (i, 1, m) { if (Edge[i].u == 1 && Edge[i].v == n) ok = 1; } if (ok) cout << 0 <<"\n"; else cout << -1 <<"\n"; return; } rep (i, 1, n) { sort (ALL(ke[i]), [] (toData A, toData B) {return A.eid < B.eid; }); } struct Data { ll u, eid, w; }; struct cmp { bool operator () (Data A, Data B) { return A.w > B.w; } }; rep (i, 1, n) { dp[i][0] = INF; iter (&id, ke[i]) dp[i][id.eid] = INF; } priority_queue<Data, vector<Data>, cmp> pq; pq.push({1, 0, 0}); dp[1][0] = 0; while (!pq.empty()) { ll u = pq.top().u, ueid = pq.top().eid; pq.pop(); static set<int> curcol; iter (&id, curcol) costcol[id] = 0; curcol.clear(); iter (&id, ke[u]) { curcol.insert(id.C); costcol[id.C] += id.P; } iter (&id, ke[u]) { ll v = id.v, C = id.C, p = id.P, toid = id.eid; if (dp[v][0] > dp[u][ueid] + costcol[id.C] - id.P - (id.C == color[ueid]) * Edge[ueid].P) { dp[v][0] = dp[u][ueid] + costcol[id.C] - id.P - (id.C == color[ueid]) * Edge[ueid].P; pq.push({v, 0, dp[v][0]}); } if (SZ(curcol) < m) { if (dp[v][toid] > dp[u][ueid] + id.P) { dp[v][toid] = dp[u][ueid] + id.P; pq.push({v, toid, dp[v][toid]}); } } } } ll res = dp[n][0]; iter (&id, ke[n]) res = min(res, dp[n][id.eid]); if (res != INF) cout << res <<"\n"; else cout << -1 <<"\n"; } #define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); int main () { // file("c"); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll num_Test = 1; // cin >> num_Test; while(num_Test--) solution(); } /* 18 3 2 5 6 21 13 19 9 17 14 17 19 20 2 16 2 10 9 14 19 20 14 16 1 3 17 19 14 21 18 19 4 7 5 12 1 13 */

Compilation message (stderr)

Main.cpp: In function 'void solution()':
Main.cpp:88:26: warning: unused variable 'C' [-Wunused-variable]
   88 |             ll v = id.v, C = id.C, p = id.P, toid = id.eid;
      |                          ^
Main.cpp:88:36: warning: unused variable 'p' [-Wunused-variable]
   88 |             ll v = id.v, C = id.C, p = id.P, toid = id.eid;
      |                                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...