이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll dis[5][100005];
bool vis[100005];
vector<pair<ll, ll>>adj[100005];
vector<ll>adj2[100005];
class cmp{
public:
bool operator()(pair<ll, ll>p1, pair<ll, ll>p2){
return p1.second>p2.second;
}
};
void dijkstra(int src, int idx){
for(int i=0;i<100005;i++) dis[idx][i]=1e16;
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, cmp>pq;
dis[idx][src]=0;
pq.push({src, 0});
memset(vis, 0, sizeof vis);
while(!pq.empty()){
ll x=pq.top().first, w=pq.top().second;
pq.pop();
if(vis[x]) continue;
vis[x]=true;
for(auto u:adj[x]){
ll y=u.first, cw=u.second;
if(dis[idx][y]>cw+w){
dis[idx][y]=cw+w;
pq.push({y, dis[idx][y]});
}
}
}
}
vector<int>tour;
void dfs(int x){
vis[x]=true;
for(int y:adj2[x]){
if(vis[y]) continue;
dfs(y);
}
tour.push_back(x);
}
ll mini[100005];
ll solve(int a, int b){
ll ans=LONG_LONG_MAX;
for(int i:tour){
mini[i]=dis[b][i];
for(int j:adj2[i]){
mini[i]=min(mini[i], mini[j]);
}
ans=min(ans, dis[a][i]+mini[i]);
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m, s, t, u, v;
cin>>n>>m>>s>>t>>u>>v;
vector<pair<pair<ll, ll>, ll>>edges;
for(int i=1;i<=m;i++){
ll x, y, w;
cin>>x>>y>>w;
edges.push_back({{x, y}, w});
adj[x].push_back({y, w});
adj[y].push_back({x, w});
}
dijkstra(s, 1);
dijkstra(t, 2);
dijkstra(u, 3);
dijkstra(v, 4);
/*for(int i=1;i<=4;i++){
for(int j=1;j<=n;j++){
cout<<dis[i][j]<<" ";
}
cout<<endl;
}*/
for(auto i:edges){
ll x=i.first.first, y=i.first.second, w=i.second;
if(dis[1][x]+dis[2][y]+w==dis[1][t]) adj2[x].push_back(y);
else if(dis[1][y]+dis[2][x]+w==dis[1][t]) adj2[y].push_back(x);
}
memset(vis, false, sizeof vis);
for(int i=1;i<=n;i++){
if(!vis[i]) dfs(i);
}
ll ans=dis[3][v];
ans=min(ans, solve(3, 4));
ans=min(ans, solve(4, 3));
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |