stl优先队列,急!!!
  • 板块学术版
  • 楼主jyulong
  • 当前回复21
  • 已保存回复21
  • 发布时间2024/8/21 22:12
  • 上次更新2024/8/22 10:13:03
查看原帖
stl优先队列,急!!!
1351616
jyulong楼主2024/8/21 22:12
#include<bits/stdc++.h>
using namespace std;
vector<int> head[100001];
bool vis[100001];
int dis[100001];
struct node
{
	int dot,dis;
};
bool operator<(const node &x,const node &y)
{
	return x.dis>y.dis;
}
priority_queue<node> q;
int main()
{
	int i,j,k,n,m,p,c,u,v;
	node temp;
	cin>>n>>p>>c;
	cin>>m;
	for(i=1;i<=p;i++)
	{
		scanf("%d%d",&u,&v); 
		head[u].push_back(v);
		head[v].push_back(u);
	}
	for(i=1;i<=n;i++)
	{
		dis[i]=10000000;
	}
	vis[c]=1;
	dis[c]=0;
	for(i=0;i<head[c].size();i++)
	{
		dis[head[c][i]]=dis[c]+1; 
		q.push({head[c][i],dis[c]+1});
	}
	for(i=1;i<=n;i++)
	{
		u=0;
		j=0x3f3f3f3f;
		while(!q.empty())
		{
			temp=q.top();
			q.pop();
			if(!vis[temp.dot])
			{
				u=temp.dot;
				break;
			}
		}
		vis[u]=1;
		for(k=0;k<head[u].size();k++)
		{
			v=head[u][k];
			if(!vis[v]&&dis[u]+1<dis[v])
			{
				dis[v]=dis[u]+1;
				q.push({v,dis[v]});
			}
		}
	}
	k=0;
	for(i=1;i<=n;i++)
	{
		if(dis[i]>k)
		{
			k=dis[i];
		}
	}
	cout<<k+1+m;
}

请问37,60行是什么用法,q不是结构体吗

2024/8/21 22:12
加载中...