社区讨论
为什么用Dijkstra跑最短路不行???
P1144最短路计数参与者 10已保存回复 17
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 17 条
- 当前快照
- 1 份
- 快照标识符
- @mi6x4l96
- 此快照首次捕获于
- 2025/11/20 12:15 4 个月前
- 此快照最后确认于
- 2025/11/20 15:13 4 个月前
CPP
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1007,mod=100003;
struct Edge{
int nxt,to;
}e[N<<2];
struct node{
int u,d;
bool operator <(const node& rhd) const {
return d>rhd.d;
}
};
priority_queue<node> Q;
int n,m,h[N<<2],t,ans[N],dis[N],js[N][N];
inline void addEdge(int u,int v){
e[++t].to=v;
e[t].nxt=h[u];
h[u]=t;
}
inline void Dijkstra(){
for(int i=1;i<=n;i++)
dis[i]=2147483647;
dis[1]=0;
Q.push((node){1,0});
while(!Q.empty()){
node fr=Q.top();Q.pop();
int u=fr.u,d=fr.d;
if(d!=dis[u])
continue;
for(int i=h[u];i;i=e[i].nxt){
int v=e[i].to;
if(dis[v]==dis[u]+1)
ans[v]=(ans[v]+js[u][v])%mod;
if(dis[v]>dis[u]+1){
dis[v]=dis[u]+1;
Q.push((node){v,dis[v]});
ans[v]=js[u][v];
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
while(m--){
int a,b;
scanf("%d%d",&a,&b);
js[a][b]++;js[b][a]++;
addEdge(a,b);addEdge(b,a);
}
Dijkstra();
ans[1]=1;
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}
回复
共 17 条回复,欢迎继续交流。
正在加载回复...