样例过了,但0分,求大佬指点
  • 板块学术版
  • 楼主Lycdeer
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/11 13:57
  • 上次更新2024/8/11 15:25:16
查看原帖
样例过了,但0分,求大佬指点
1088782
Lycdeer楼主2024/8/11 13:57
#include<bits/stdc++.h>
using namespace std;
const int N=100005,inf=2147483647;
int n,m; 
long long to1[N],val1[N],h1[N],nxt1[N],cnt1,vis1[N],dis1[N];
long long to2[N],val2[N],h2[N],nxt2[N],cnt2,vis2[N],dis2[N];
void add1(int a,int b,int c){
	to1[++cnt1]=b;
	val1[cnt1]=c;
	nxt1[cnt1]=h1[a];
	h1[a]=cnt1;
}
void add2(int a,int b,int c){
	to2[++cnt2]=b;
	val2[cnt2]=c;
	nxt2[cnt2]=h2[a];
	h2[a]=cnt2;
}
struct node{
	long long v,w;
	friend bool operator<(node a,node b){
		return a.w>b.w; 
	}
};
priority_queue<node> q;
void Dijkstra1(){
	for(int i=2;i<=n;i++) dis1[i]=inf;
	node tmp;
	tmp.v=1; tmp.w=0; q.push(tmp);
	while(!q.empty()){
		int u=q.top().v; q.pop();
		if(vis1[u]) continue;
		vis1[u]=1;
		for(int i=h1[u];i;i=nxt1[i]){
			if(dis1[to1[i]]>dis1[u]+val1[i]){
				dis1[to1[i]]=dis1[u]+val1[i];
				tmp.v=to1[i]; tmp.w=dis1[to1[i]]; q.push(tmp);
			}
		}
	}
}
void Dijkstra2(){
	for(int i=2;i<=n;i++) dis2[i]=inf;
	node tmp;
	tmp.v=1; tmp.w=0; q.push(tmp);
	while(!q.empty()){
		int u=q.top().v; q.pop();
		if(vis2[u]) continue;
		vis2[u]=1;
		for(int i=h2[u];i;i=nxt2[i]){
			if(dis2[to2[i]]>dis2[u]+val2[i]){
				dis2[to2[i]]=dis2[u]+val2[i];
				tmp.v=to2[i]; tmp.w=dis2[to2[i]]; q.push(tmp);
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1,u,v,w;i<=m;i++){
		cin>>u>>v>>w;
		add1(u,v,w);
		add2(v,u,w);
	}
	Dijkstra1();
	Dijkstra2();
	long long ans;
	for(int i=2;i<=n;i++) ans+=dis1[i]+dis2[i];
	cout<<ans;
	return 0;
}
2024/8/11 13:57
加载中...