제출 #1155262

#제출 시각아이디문제언어결과실행 시간메모리
1155262trandangquangCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
2095 ms19956 KiB
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define ii pair<int,int>
#define fi first
#define se second

const int N=100005;

int n,m,s,t,u,v; ll d[3][N],dp[N]; bool chk[N];
vector<ii> adj[N];
vector<int> dag[N];

void dijkstra(int st, int id){
    memset(d[id],0x3f,sizeof(d[id]));
    d[id][st]=0;
    priority_queue<ii,vector<ii>,greater<ii>>pq;
    pq.push({0,st});
    while(pq.size()){
        ii tp=pq.top();pq.pop();
        ll dx=tp.fi; int x=tp.se;
        if(dx>d[id][x]) continue;

        for(ii e:adj[x]){
            int y=e.fi,w=e.se;
            if(d[id][y]>d[id][x]+w){
                d[id][y]=d[id][x]+w;
                pq.push({d[id][y],y});
            }
        }
    }
}

void dfs(int x){
    dp[x]=d[2][x];
    for(int y:dag[x]){
        dfs(y);
        if(chk[y]) dp[x]=min(dp[x],dp[y]);
        chk[x]|=chk[y];
    }
}

int main(){
    if(fopen("test.inp","r")){
        freopen("test.inp","r",stdin);
        freopen("test.out","w",stdout);
    }
    cin.tie(0)->sync_with_stdio(0);

    cin>>n>>m>>s>>t>>u>>v;
    for(int i=1; i<=m; ++i){
        int x,y,w; cin>>x>>y>>w;
        adj[x].emplace_back(y,w);
        adj[y].emplace_back(x,w);
    }

    dijkstra(s,0); dijkstra(u,1); dijkstra(v,2);
    for(int x=1; x<=n; ++x){
        for(ii e:adj[x]){
            int y=e.fi,w=e.se;
            if(d[0][y]==d[0][x]+w){
                dag[x].emplace_back(y);
            }
        }
    }

    chk[t]=1;
    dfs(s);
    ll res=1e18;
    for(int i=1; i<=n; ++i){
        res=min(res,d[1][i]+dp[i]);
    }
    cout<<res<<'\n';
}

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

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:46:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |         freopen("test.inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:47:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         freopen("test.out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...