Submission #1164665

#TimeUsernameProblemLanguageResultExecution timeMemory
1164665mertbbmRobot (JOI21_ho_t4)C++20
0 / 100
3098 ms91844 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ld long double #define show(x,y) cout << y << " " << #x << endl; #define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl; typedef pair<int,int>pii; typedef pair<int,pii>pi2; mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); void solve(){ int n,m; cin >> n >> m; int temp,temp2,temp3,temp4; vector<pair<int,pii>>adj[n+5]; unordered_map<int,vector<pii>>adj2[n+5]; map<pii,int>mp; for(int x=0;x<m;x++){ cin >> temp >> temp2 >> temp3 >> temp4; adj[temp].push_back({temp2,{temp3,temp4}}); adj[temp2].push_back({temp,{temp3,temp4}}); mp[{temp,temp3}]+=temp4; mp[{temp2,temp3}]+=temp4; adj2[temp][temp3].push_back({temp2,temp4}); adj2[temp2][temp3].push_back({temp,temp4}); } unordered_map<int,int>dist[n+5]; priority_queue<pi2,vector<pi2>,greater<pi2>>pq; dist[1][0]=0; pq.push({0,{1,0}}); for(auto it:adj2[1]){ dist[1][it.first]=mp[{1,it.first}]; pq.push({mp[{1,it.first}],{1,it.first}}); } while(!pq.empty()){ pi2 cur=pq.top(); pq.pop(); int index=cur.second.first; int col=cur.second.second; int d=cur.first; //show3(index,index,col,col,d,d); if(dist[index][col]!=d) continue; if(col!=0){ for(auto it:adj2[index][col]){ int nx=it.first; int cost=it.second; int nd=d-cost; if(dist[nx].find(0)==dist[nx].end()||dist[nx][0]>nd){ dist[nx][0]=nd; pq.push({nd,{nx,0}}); } } } for(auto it:adj[index]){ int nx=it.first; int a=it.second.first; int cost=it.second.second; //no charge int nd=d+cost; if(mp[{index,a}]==cost) nd=d; if(dist[nx].find(0)==dist[nx].end()||dist[nx][0]>nd){ dist[nx][0]=nd; pq.push({nd,{nx,0}}); } //charge nd=d+mp[{nx,a}]; if(dist[nx].find(a)==dist[nx].end()||dist[nx][a]>nd){ dist[nx][a]=nd; pq.push({nd,{nx,a}}); } } } int best=1e18; for(int x=0;x<=m;x++){ if(dist[n].find(x)!=dist[n].end()){ best=min(best,dist[n][x]); } } if(best==1e18) cout << -1; else cout << best; } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int t=1; //cin >> t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...