제출 #1361645

#제출 시각아이디문제언어결과실행 시간메모리
1361645sasdeRobot (JOI21_ho_t4)C++20
100 / 100
738 ms80368 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define ii pair<int,int>
#define siuuu "robot1"
const int N = 1e6 + 7;
const int mod = 1e9 + 7;
int a[N];
map < ii , int > sum;
struct truc{
    int l , r , c , p;
}edge[N];
vector< ii > g[N];
int dist[N];
int n , m;
int Time = n;
map < ii , int > mp;
int id(int u , int c){
    if (mp[{u , c}]) return mp[{u , c}];
    return mp[{u , c}] = ++Time;
}
void dijk(int ronaldo){
    priority_queue< ii , vector< ii > , greater < ii > > q;
    for (int i = 1 ; i <= Time ; i++) dist[i] = 1e18;
    dist[ronaldo] = 0;
    q.push({0 , ronaldo});
    while (!q.empty()){
        auto c = q.top();
        q.pop();
        int u = c.se , w = c.fi;
        if (dist[u] < w) continue;
        for (auto k : g[u]){
            int v = k.fi , cost = k.se;
            if (dist[v] > dist[u] + cost){
                dist[v] = dist[u] + cost;
                q.push({dist[v] , v});
            }
        }
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    if(fopen(siuuu".inp","r"))
    {
        freopen(siuuu".inp","r", stdin);
        freopen(siuuu".out","w", stdout);
    }

    cin >> n >> m;
    Time = n;
    for (int i = 1 ; i <= m ; i++){
        int l , r , c , p;
        cin >> l >> r >> c >> p;
        edge[i] = {l , r , c , p};
        sum[{l , c}] += p;
        sum[{r , c}] += p;
    }
    for (int i = 1 ; i <= m ; i++){
        auto [l , r , c , p] = edge[i];
        int w_l = sum[{l , c}] - p;
        int w_r = sum[{r , c}] - p;
        w_l = min(w_l , p);
        w_r = min(w_r , p);
        g[l].push_back({r , w_l});
        g[r].push_back({l , w_r});
        g[l].push_back({id(r , c) , 0});
        g[id(r , c)].push_back({l , sum[{r , c}] - p});
        g[r].push_back({id(l , c) , 0});
        g[id(l , c)].push_back({r , sum[{l , c}] - p});
    }
    dijk(1);
    cout << (dist[n] == 1e18 ? -1 : dist[n]);
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:50:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |         freopen(siuuu".inp","r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:51:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |         freopen(siuuu".out","w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…