重载错在哪?悬赏一关
  • 板块P1491 集合位置
  • 楼主oiyang
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/10/5 22:23
  • 上次更新2023/11/2 15:23:00
查看原帖
重载错在哪?悬赏一关
856309
oiyang楼主2023/10/5 22:23

这题我用dij然后用优先队列存结构体的时候自己重载运算符和用优先队列来存pair结果不同,为啥?

struct node
{
	double dis;
	int pos;
	friend bool operator < (const node &x,const node &y)
	{
		return x.dis>y.dis;
	}
};
priority_queue<node>q;
const int inf=0x7fffffff;
int change[maxnode];
void dij(int s,int p)
{
	for(int i=1;i<=n;i++)
		d[i]=inf,vis[i]=0;
	d[s]=0;
	q.push(node{0,s});
	while(!q.empty())
	{
		int temppos=q.top().pos;
		q.pop();
		if(vis[temppos])
			continue;
		vis[temppos]=1;
		for(int i=head[temppos];i;i=line[i].pre)
		{
			if(p==-1 || pd(i,p))
			{
				int v=line[i].to;
				double w=line[i].w;
				if(d[v]>d[temppos]+w)
				{
					d[v]=d[temppos]+w;
					if(p==-1)
						change[v]=i;
					q.push(node{-d[v],v});
				}
			}
		}
	}
}

下面的是对的

priority_queue<pair<double,int> >q;
const int inf=0x7fffffff;
int change[maxnode];
void dij(int s,int p)
{
	for(int i=1;i<=n;i++)
		d[i]=inf,vis[i]=0;
	d[s]=0;
	q.push(make_pair(0,s));
	while(!q.empty())
	{
		int temppos=q.top().second;
		q.pop();
		if(vis[temppos])
			continue;
		vis[temppos]=1;
		for(int i=head[temppos];i;i=line[i].pre)
		{
			if(p==-1 || pd(i,p))
			{
				int v=line[i].to;
				double w=line[i].w;
				if(d[v]>d[temppos]+w)
				{
					d[v]=d[temppos]+w;
					if(p==-1)
						change[v]=i;
					q.push(make_pair(-d[v],v));
				}
			}
		}
	}
}
2023/10/5 22:23
加载中...