史上最难题:a+b problem 题解
算法:dijkstra
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+100;
struct node{
int y,z;
//y 是这条边的终
//z 是权值
};
long long dis[maxn],n,m;
int vis[maxn]={false};
vector<node> G[maxn];
int cnt=0;
long long ans=0;
void dij(){
for(int i=1;i<=n;i++){
dis[i]=LLONG_MAX;
}
dis[1]=0;
set<pair<long long,int> > st;
st.insert(make_pair(dis[1],1));
while(not st.empty()){
int u=st.begin()->second;
st.erase(st.begin());
if(vis[u]==1) continue;
vis[u]=1;
cnt++;
ans=max(ans,dis[u]);
//https://114.514.191.810
for(int i=0;i<G[u].size();i++){
int v=G[u][i].y;
int w=G[u][i].z;
if(dis[v]>dis[u]+w){
st.erase(make_pair(dis[v],v));
dis[v]=dis[u]+w;
st.insert(make_pair(dis[v],v));
}
}
}
}
int main(){
n=3;
int a,b;
cin>>a>>b;
G[1].push_back({2,a});
G[2].push_back({3,b});
dij();
cout<<dis[3];
}