晕。我结构体定义到底错在哪里了?
查看原帖
晕。我结构体定义到底错在哪里了?
43763
Mistysun楼主2021/6/2 22:16
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
long long n,m,edgenum,ans;
long long head[200005],vet[200005],wei[200005],nex[200005],dis[200005];
struct  nod
{
	int x;
	int dis;
	bool operator <(const nod a)const
	{
		return this->dis>a.dis;
	}
};
priority_queue< nod ,vector<nod>,greater<nod>>q;
void dij(int t)
{
	for(int i=1;i<=n*2;i++)dis[i]=10000000007;
	dis[t]=0;
	q.push(nod(t,0));
	while(!q.empty())
	{
		nod c=q.top();q.pop();
		for(int i= head[c.x];~i;i=nex[i])
		{
			while(dis[vet[i]]>c.dis+wei[i])
			{
				dis[vet[i]]=c.dis+wei[i];
				q.push(nod(vet[i],dis[vet[i]]))
			}
		}
	}
}
void add(int u,int v,int w)
{
	edgenum++;
	head[u]=edgenum;
	vet[edgenum]=v;
	wei[edgenum]=w;
	nex[edgenum]=head[u];
}
int main()
{
	memset(head,-1,sizeof(head));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
		add(v+n,u+n,w);
	}
	dij(1);
	for(int i=1;i<=n;i++)
		ans+=dis[i];
	dis(n+1);
	for(int i=n+1;i<=2*n;i++)
		ans+=dis[i];
	printf("%d",ans);
	return 0;
}
2021/6/2 22:16
加载中...