60分WA求助
查看原帖
60分WA求助
866613
sansesantongshun楼主2023/8/14 14:50
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,dis,head[2005],cnt=0,a[2005],c,d,e,ans=0;
pair<int,int> b;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >p;
struct node
{
	int next,to,dis;
} edge[200005];
void add(int from,int to,int dis)
{
	edge[++cnt].next=head[from];
	edge[cnt].to=to;
	edge[cnt].dis=dis;
	head[from]=cnt;
}
int main()
{
	memset(a,-1,sizeof(a));
	cin>>n>>m;
	while (m--)
	{
		scanf("%d%d%d",&x,&y,&dis);
		add(x,y,dis);
		add(y+n,x+n,dis);
	}
	a[1]=a[1+n]=0;
	for (int i=head[1];i;i=edge[i].next)
	{
		d=edge[i].dis;
		e=edge[i].to;
		a[e]=d;
		p.push(make_pair(d,e));
	}
	for (int i=head[1+n];i;i=edge[i].next)
	{
		d=edge[i].dis;
		e=edge[i].to;
		a[e]=d;
		p.push(make_pair(d,e));
	}
	while (!p.empty())
	{
		b=p.top();
		p.pop();
		c=b.second;
		if (a[c]<b.first)
		continue;
		for (int i=head[c];i;i=edge[i].next)
		{
			d=edge[i].dis;
			e=edge[i].to;
			if (a[e]==-1 || a[c]+d<a[e])
			{
				a[e]=a[c]+d;
				p.push(make_pair(a[e],e));
			}
		}
	}
	for (int i=2;i<=n;++i)
	ans+=a[i]+a[i+n];
	cout<<ans;
}
2023/8/14 14:50
加载中...