五十分求助
查看原帖
五十分求助
144762
NIMNIM楼主2022/7/22 22:11

有RE 有WA 求dalao帮忙康康

测评记录

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>

using namespace std;

#define re register int
#define il inline
#define MAXN 1005
#define MAXM 100005
#define INF 0x7fffffff
#define LL long long

int n,m,cnt=0;
LL dis1[MAXN],dis2[MAXN];
int head1[MAXN]={},head2[MAXN]={};
bool mark[MAXN]={};
LL len=0;

struct nodea
{
	int to,w,nex;
}a[MAXM];

struct nodeb
{
	int to,w,nex;
}b[MAXM];

struct cmp1
{
	bool operator()(int r,int l)
	{
		return dis1[l]<dis1[r];
	}
};

struct cmp2
{
	bool operator()(int r,int l)
	{
		return dis2[l]<dis2[r];
	}
};

priority_queue <int,vector<int>,cmp1> que1;
priority_queue <int,vector<int>,cmp2> que2;

il void add1 (int l,int r,int val)
{
//	if(l==1) cout<<cnt<<" "<<r<<endl;
	a[++cnt].to=r;
	a[cnt].w=val;
	a[cnt].nex=head1[l];
	head1[l]=cnt;
}

il void add2 (int l,int r,int val)
{
	b[++cnt].to=r;
	b[cnt].w=val;
	b[cnt].nex=head2[l];
	head2[l]=cnt;
}

il void dijkstra1( )
{
	for(re i=1;i<=n;++i)
		dis1[i]=INF;
	dis1[1]=0;
	que1.push(1);
	while(!que1.empty())
	{
		int p=que1.top();
		que1.pop();
		if(mark[p])	continue;
		mark[p]=true;
		for(re i=head1[p];i;i=a[i].nex)
		{
			int v=a[i].to;
			//cout<<v<<endl;
			if(dis1[v]>dis1[p]+a[i].w)
			{
			//	cout<<dis1[v]<<endl;
				dis1[v]=dis1[p]+a[i].w;
				que1.push(v);
			}
		}
	}
}

il void dijkstra2( )
{
	for(re i=1;i<=n;++i)
		dis2[i]=INF;
	dis2[1]=0;
	que2.push(1);
	while(!que2.empty())
	{
		int p=que2.top();
		que2.pop();
		if(mark[p])	continue;
		mark[p]=true;
		for(re i=head2[p];i;i=b[i].nex)
		{
			int v=b[i].to;
			if(dis2[v]>dis2[p]+b[i].w)
			{
				dis2[v]=dis2[p]+b[i].w;
				que2.push(v);
			}
		}
	}
}

int main ( )
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	int l,r,val;
	cin>>n>>m;
	for(re i=1;i<=m;++i)
	{
		cin>>l>>r>>val;
		add1(l,r,val);
		add2(r,l,val);
	}
	dijkstra1();
	memset(mark,0,sizeof(mark));
//	memset(head,0,sizeof(head));
	dijkstra2();
	for(re i=1;i<=n;++i)
		len+=dis1[i]+dis2[i];
	printf("%lld",len);
	return 0;
}
2022/7/22 22:11
加载中...