Submission #1176688

#TimeUsernameProblemLanguageResultExecution timeMemory
1176688paulxaxaRobot (JOI21_ho_t4)C++17
0 / 100
49 ms17736 KiB
#include <bits/stdc++.h> #define NMAX 100000 #define LOG 20 #define ll long long int #define BASE 32 #define MOD 1000000007 using namespace std; ifstream fin("cod.in"); ofstream fout("cod.out"); int n,m; struct edge { int to,c,p,id; }; struct state { ll d; int x,t; state(ll d,int x,int t) { this->d = d; this->x = x; this->t = t; } }; bool cmpHeap(state a,state b) { return a.d > b.d; } vector<edge> adj[NMAX+1]; set<int> bad[NMAX+1]; int rem[NMAX+1]; ll dist[NMAX+1][2]; int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> m; for(int i=1;i<=m;i++) { int a,b,c,p; cin >> a >> b >> c >> p; adj[a].push_back({b,c,p,i}); adj[b].push_back({a,c,p,i}); } for(int i=1;i<=n;i++) { map<int,int> freq; for(auto e : adj[i]) { if(freq[e.c] > 0) { rem[i]++; } freq[e.c]++; } for(auto e : adj[i]) { if(freq[e.c]>1) { bad[i].insert(e.id); } } } // for(int i=1;i<=n;i++) // { // dist[i][0] = dist[i][1] = 1e15; // } // vector<state> pq; // dist[1][0] = 0; // pq.push_back({0,1,0}); // while(!pq.empty()) // { // push_heap(pq.begin(),pq.end(),cmpHeap); // int x = pq.back().x; // int t = pq.back().t; // ll d = pq.back().d; // pq.pop_back(); // // if(d==dist[x][t]) // { // int cost = rem[x] - t; // for(auto e : adj[x]) // { // int t1 = bad[e.to].find(e.id) != bad[e.to].end(); // if(dist[e.to][t1] > dist[x][t] + cost) // { // dist[e.to][t1] = dist[x][t] + cost; // pq.push_back({dist[e.to][t1],e.to,t1}); // push_heap(pq.begin(),pq.end(),cmpHeap); // } // } // } // } if(min(dist[n][0],dist[n][1])==1e15) { cout << -1; } else { cout << min(dist[n][0],dist[n][1]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...