Submission #1159655

#TimeUsernameProblemLanguageResultExecution timeMemory
1159655lidplfRobot (JOI21_ho_t4)C++20
24 / 100
1006 ms91960 KiB
#include <bits/stdc++.h> #define pii pair<int,int> #define pb push_back #define ll long long #define MOD 1000000007 #define all(x) x.begin(),x.end() #define MOD2 998244353 using namespace std; void solve(int cas){ int n,m; cin>>n>>m; using tll = tuple<ll,ll,ll,ll>; vector<vector<tll>> g(n); vector<map<ll,vector<ll>>> ct(n); vector<map<ll,ll>> sm(n); for (int i = 0; i < m; i++){ int a,b,c,d; cin>>a>>b>>c>>d; --a;--b; g[a].emplace_back(make_tuple(b,c,d,0)); g[b].emplace_back(make_tuple(a,c,d,0)); ct[a][c].emplace_back(b); ct[b][c].emplace_back(a); sm[a][c]+=d; sm[b][c]+=d; } priority_queue<pair<ll,ll>, vector<pair<ll,ll>>, greater<pair<ll,ll>>> heap; heap.push(make_pair(0,0)); for (int i = 0; i < n; i++){ vector<tll> pt; for (auto& [neighbor, col, cc, we]: g[i]){ if (ct[neighbor][col].size()==2){ pt.emplace_back(make_tuple(ct[neighbor][col][0]==i ? ct[neighbor][col][1]: ct[neighbor][col][0], col, LLONG_MAX, cc)); } } for (auto& x: pt) g[i].emplace_back(x); } vector<ll> dp(n, LLONG_MAX); dp[0] = 0; while (!heap.empty()){ auto [weight, node] = heap.top(); heap.pop(); if (dp[node] < weight) continue; if (node==n-1){ cout << weight << '\n'; return; } for (auto& [neighbor, col, cc, we]: g[node]){ if (we){ if (weight + we < dp[neighbor]){ dp[neighbor] = weight + we; heap.push(make_pair(dp[neighbor], neighbor)); } continue; } if (weight + min(cc, sm[node][col]-cc)*(ct[node][col].size() > 1) < dp[neighbor]){ dp[neighbor] = weight + min(cc, sm[node][col]-cc)*(ct[node][col].size() > 1); heap.push(make_pair(dp[neighbor],neighbor)); } } } cout << -1 << '\n'; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin>>t; for (int i = 1; i <= t; i++){ solve(i); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...