社区讨论
25分球条,玄关
P1342[CERC1998] 请柬参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhiyvhex
- 此快照首次捕获于
- 2025/11/03 17:57 4 个月前
- 此快照最后确认于
- 2025/11/03 17:57 4 个月前
,除了第四个点都了
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
constexpr int N=1e6+10;
int n,m,u,v,w,dis[N],ans;
struct edge{
int v,w;
bool operator<(const edge &a)const{a.w<w;}
};
vector<edge>e[N],f[N];
priority_queue<edge>q,p;
inline void djistra(){
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
q.push({1,0});
while(!q.empty()){
int from=q.top().v,now=q.top().w;
q.pop();
if(dis[from]<now)continue;
for(int i=0;i<e[from].size();i++){
int to=e[from][i].v,w=e[from][i].w;
if(dis[to]>dis[from]+w){
dis[to]=dis[from]+w;
q.push({to,dis[to]});
}
}
}
for(int i=1;i<=n;i++)ans+=dis[i];
}
inline void artsijd(){
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
p.push({1,0});
while(!p.empty()){
int from=p.top().v,now=p.top().w;
p.pop();
if(dis[from]<now)continue;
for(int i=0;i<f[from].size();i++){
int to=f[from][i].v,w=f[from][i].w;
if(dis[to]>dis[from]+w){
dis[to]=dis[from]+w;
p.push({to,dis[to]});
}
}
}
for(int i=1;i<=n;i++)ans+=dis[i];
}
signed main(){
// ios::sync_with_stdio(false);
// freopen("P1342_1.in","r",stdin);
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>u>>v>>w,e[u].push_back({v,w}),f[v].push_back({u,w});
djistra();
artsijd();
cout<<ans<<"\n";
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...