제출 #1299803

#제출 시각아이디문제언어결과실행 시간메모리
1299803StefanSebezCommuter Pass (JOI18_commuter_pass)C11
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
#define mp make_pair
const int N=1e5+50,inf=1e9;
const ll INF=1e18;
vector<pair<int,int>>E[N];
int n,m,S,T,U,V;
void Dijkstra(int U,vector<ll>&dist){
    dist.assign(n+1,INF);
    priority_queue<pair<ll,int>>pq;
    dist[U]=0;
    pq.push({-dist[U],U});
    while(!pq.empty()){
        auto [temp,u]=pq.top();pq.pop();
        if(-temp!=dist[u])continue;
        for(auto [v,w]:E[u]){
            if(dist[v]>dist[u]+w){
                dist[v]=dist[u]+w;
                pq.push({-dist[v],v});
            }
        }
    }
}
vector<int>E1[N];
int main(){
    scanf("%i%i%i%i%i%i",&n,&m,&S,&T,&U,&V);
    for(int i=1;i<=m;i++){
        int u,v,w;scanf("%i%i%i",&u,&v,&w);
        E[u].pb({v,w});
        E[v].pb({u,w});
    }
    vector<ll>dist;
    Dijkstra(S,dist);
    for(int u=1;u<=n;u++){
        for(auto [v,w]:E[u]){
            if(dist[v]==dist[u]+w){
                E1[u].pb(v);
            }
        }
    }
    int deg[n+10]={0};
    for(int i=1;i<=n;i++) for(auto j:E1[i]) deg[j]++;
    queue<int>kju;
    for(int i=1;i<=n;i++) if(deg[i]==0) kju.push(i);
    vector<int>topsort;
    while(!kju.empty()){
        int u=kju.front();kju.pop();
        topsort.pb(u);
        for(auto i:E1[u]){
            deg[i]--;
            if(deg[i]==0) kju.push(i);
        }
    }
    vector<ll>distU,distV;
    Dijkstra(U,distU);
    Dijkstra(V,distV);
    vector<int>revtopsort=topsort;
    reverse(revtopsort.begin(),revtopsort.end());
    ll res=distV[U];
    ll dp[n+10];bool moze[n+10]={0};
    for(auto u:revtopsort){
        dp[u]=distV[u];
        if(u==T)moze[u]=true;
        for(auto i:E1[u])if(moze[i]){
            dp[u]=min(dp[u],dp[i]);
            moze[u]=true;
        }
        if(moze[u])res=min(res,distU[u]+dp[u]);
    }
    for(auto u:revtopsort){
        dp[u]=distU[u];
        moze[u]=false;
        if(u==T)moze[u]=true;
        for(auto i:E1[u])if(moze[i]){
            dp[u]=min(dp[u],dp[i]);
            moze[u]=true;
        }
        if(moze[u])res=min(res,distV[u]+dp[u]);
    }
    printf("%lld\n",res);
    return 0;
}

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

commuter_pass.c:1:10: fatal error: bits/stdc++.h: No such file or directory
    1 | #include <bits/stdc++.h>
      |          ^~~~~~~~~~~~~~~
compilation terminated.