求助 为什么CE
  • 板块学术版
  • 楼主大眼仔Happy
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/8/21 21:23
  • 上次更新2023/11/3 02:07:53
查看原帖
求助 为什么CE
537046
大眼仔Happy楼主2023/8/21 21:23
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,inf=2e9;
int n;
struct edge{int u,v,w,nxt;}e[N*10];
int cnt,head[N];
void add(int u,int v,int w)
{
	e[++cnt]=(edge){u,v,w,head[u]};
	head[u]=cnt;
}
struct data
{
	int w,id;
	bool operator()(data x,data y){return x.w>y.w;}
};
int dis[N];
bool vis[N];
void Dijkstra()
{
	priority_queue<data,vector<data>,data>q;
	dis[0]=inf;
	for(int i=10;i<n;i++)dis[i]=inf;
	for(int i=1;i<=9;i++)q.push((data){i,i}),dis[i]=i;
	while(!q.empty())
	{
		int u=q.top().id;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=e[i].nxt)
		{
			int v=e[i].v,w=e[i].w;
			if(dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
				if(vis[v]==0)q.push((data){dis[v],v});
			}
		}
	}
} 
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++)
		for(int j=0;j<10;j++)
			add(i,(i*10+j)%n,j);
	Dijkstra();
	printf("%d",dis[0]);
	return 0;
}

就一个最短路(很久没写了不太会),但是不知道为什么CE了,本地是能编译的。

另外,Dijkstra是能处理正边权还是非负边权

2023/8/21 21:23
加载中...