1 条题解

  • 0
    @ 2025-10-8 16:55:12
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10,M=4e5+10,P=100003;
    struct edge{int x,y,pre;}a[M];int alen,last[N];
    void ins(int x,int y){alen++;a[alen]={x,y,last[x]};last[x]=alen;}
    int read()
    {
        int x=0,f=1;char ch=getchar();
        for(;!isdigit(ch);ch=getchar()){if(ch=='-')f=-1;}
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-48;
        return x*f;
    }
    int n,m,d[N],v[N],g[N];
    void dijkstra()
    {
        priority_queue<pair<int,int> > q;
        memset(d,0x0f,sizeof(d));d[1]=0;
        memset(g,0,sizeof(g));g[1]=1;
        memset(v,0,sizeof(v));
        q.push({0,1});v[1]=1;
        while(!q.empty())
    	{
            int x=q.top().second;q.pop();v[x]=0;
            for(int k=last[x];k;k=a[k].pre)
    		{
                int y=a[k].y;
                if(d[y]>d[x]+1)
    			{
                    d[y]=d[x]+1;
                    g[y]=g[x];
                    if(v[y]==0)q.push({-d[y],y}),v[y]=1;
                }
                else if(d[y]==d[x]+1)
                {
                	g[y]=(g[y]+g[x])%P;
                }
            }
        }   
    }
    int main()
    {
        n=read();m=read();
        alen=0;memset(last,0,sizeof(last));
        for(int i=1,x,y;i<=m;i++)
    	{
            x=read();y=read();
            ins(x,y);ins(y,x);
        }
        dijkstra();
        for(int i=1;i<=n;i++)printf("%d\n",g[i]);
        return 0;
    }
    
    • 1

    信息

    ID
    1040
    时间
    100ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    50
    已通过
    29
    上传者