Submission #751256

# Submission time Handle Problem Language Result Execution time Memory
751256 2023-05-31T09:46:19 Z nonono Robot (JOI21_ho_t4) C++17
0 / 100
1168 ms 105384 KB
#include "bits/stdc++.h"
#define int long long
using namespace std;

const int linf = 1e18;
const int mxN = 1e5 + 10;
const int mxM = 2e5 + 10;

int n, m;
map<int, vector<pair<int, int>>> adj[mxN];
map<int, int> sum[mxN], d[mxN];

int col[mxM], cost[mxM];

signed main(){

    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    cin >> n >> m;
    
    for(int i = 1; i <= m; i ++){
        int u, v;
        cin >> u >> v >> col[i] >> cost[i];
        
        adj[u][col[i]].push_back({v, i});
        adj[v][col[i]].push_back({u, i});
        
        d[u][col[i]] = d[v][col[i]] = linf;
            
        sum[u][col[i]] += cost[i];
        sum[v][col[i]] += cost[i];
    }
    
    for(int i = 1; i <= n; i ++) d[i][0] = linf;
    priority_queue<array<int, 3>, vector<array<int, 3>>, greater<array<int, 3>>> pq;
    pq.push({0, 1, 0});
    d[1][0] = 0;
    
    while(!pq.empty()){
        int u = pq.top()[1];
        int D = pq.top()[0];
        int k = pq.top()[2];
        pq.pop();
        
        if(D != d[u][k]) continue ; 
        if(k){
            int c = col[k];
            for(auto v : adj[u][c]){
                if(v.first == k) continue ;
                int nCost = D + sum[u][c] - cost[v.second];
                if(nCost < d[v.first][0]){
                    d[v.first][0] = nCost;
                    pq.push({nCost, v.first, 0});
                }
            }
        } else {
            
            for(auto x : adj[u]){
                int c = x.first;
                
                for(auto v : x.second){
                    int nCost = D + min(sum[u][c] - cost[v.second], cost[v.second]);
                    if(nCost < d[v.first][0]){
                        d[v.first][0] = nCost;
                        pq.push({nCost, v.first, 0});
                    }
                    
                    if(D < d[v.first][c]){
                        d[v.first][c] = D;
                        pq.push({D, v.first, v.second});
                    }
                }
            }   
            
        }
    }
    
    if(d[n][0] == linf) d[n][0] = -1;
    cout << d[n][0] << "\n";
    
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 7 ms 14420 KB Output is correct
2 Correct 7 ms 14360 KB Output is correct
3 Correct 7 ms 14320 KB Output is correct
4 Correct 9 ms 14384 KB Output is correct
5 Correct 8 ms 14420 KB Output is correct
6 Correct 8 ms 14316 KB Output is correct
7 Correct 8 ms 14556 KB Output is correct
8 Correct 7 ms 14420 KB Output is correct
9 Incorrect 11 ms 15328 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 236 ms 41156 KB Output is correct
2 Correct 87 ms 28272 KB Output is correct
3 Correct 225 ms 36348 KB Output is correct
4 Correct 138 ms 32536 KB Output is correct
5 Incorrect 1168 ms 105384 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 7 ms 14420 KB Output is correct
2 Correct 7 ms 14360 KB Output is correct
3 Correct 7 ms 14320 KB Output is correct
4 Correct 9 ms 14384 KB Output is correct
5 Correct 8 ms 14420 KB Output is correct
6 Correct 8 ms 14316 KB Output is correct
7 Correct 8 ms 14556 KB Output is correct
8 Correct 7 ms 14420 KB Output is correct
9 Incorrect 11 ms 15328 KB Output isn't correct
10 Halted 0 ms 0 KB -