社区讨论

25分球条,玄关

P1342[CERC1998] 请柬参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhiyvhex
此快照首次捕获于
2025/11/03 17:57
4 个月前
此快照最后确认于
2025/11/03 17:57
4 个月前
查看原帖
TLE3TLE*3,除了第四个点都TT
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 条回复,欢迎继续交流。

正在加载回复...