求助
查看原帖
求助
161577
psoet楼主2020/6/15 23:24

模板题居然调一整晚都没调出来。

应该是dijkstra出问题,第八个点总共要十秒左右。代码如下(加调试语句,dij相关):

bool vis[maxn];
priority_queue<pair<LL,int>,vector<pair<LL,int> >,greater<pair<LL,int> > > Q;
void dijkstra(int s)
{
	ans=0;
	for(int i=1;i<=n;++i) dis[i]=INF;
	dis[s]=0;
	Q.push(make_pair(0,s));
	memset(vis,0,sizeof(vis));
	while(!Q.empty())
	{
		pair<LL,int> cur=Q.top();Q.pop();
		int u=cur.second;
		if(vis[u]) continue;
		vis[u]=true;
		for(int i=head[u],v;i;i=e[i].next)if(!vis[v=e[i].to])
		{
			if(dis[v]>dis[u]+e[i].w){
				dis[v]=dis[u]+e[i].w;
				Q.push(make_pair(dis[v],v));
			}
		}
	}
	for(long long i=1;i<=n;++i){
		ans+=dis[i]<INF?(dis[i]-h[s]+h[i])*i:INF*i;
	}
}

若有好心人回复请@楼主(没法及时看帖),谢谢了。

平均跑三四次(后期两次)dij要16毫秒。

2020/6/15 23:24
加载中...