1 条题解

  • 0
    @ 2024-11-17 19:40:11

    更新答案数组时,如果边权不一样则直接更新掉,如果相等则叠加,最后取模

    #include<bits/stdc++.h>
    #define ll long long
    #define endl '\n'
    #define up(i,j,k,l) for(int i=j;i<=k;i+=l)
    #define down(i,j,k,l) for(int i=j;i>=k;i-=l)
    using namespace std;
    const int N=1e6+10,MOD=100003;
    int n,m;
    int u,v;
    vector<int> vc[N];
    queue<int> q;
    int d[N],s[N];
    bool f[N];
    void spfa()
    {
    	memset(d,0x3f3f3f,sizeof d);
    	d[1]=1;
    	f[1]=true;
    	s[1]=1;
    	q.push(1);
    	while(!q.empty()){
    		u=q.front();
    		q.pop();
    		f[u]=false;
    		for(auto fw:vc[u]){
    			if(d[fw]>d[u]+1){
    				d[fw]=d[u]+1;
    				s[fw]=s[u];
    				if(f[fw]==false){
    					f[fw]=true;
    					q.push(fw);
    				}
    			}
    			else if(d[fw]==d[u]+1){
    				s[fw]+=s[u];
    				s[fw]%=MOD;
    			}
    		}
    	}	
    	return;
    }
    void solve()
    {	
    	cin>>n>>m;
    	up(i,1,m,1){
    		cin>>u>>v;
    		vc[u].push_back(v);
    		vc[v].push_back(u);
    	}
    	spfa();
    	up(i,1,n,1){
    		s[i]%=MOD;
    		cout<<s[i]<<endl;
    	}
    	return;
    }
    int main()
    {
        //ios::sync_with_stdio(false);
    	//cin.tie(0);
    	//freopen(".in","r",stdin);
    	//freopen(".out","w",stdout);
    	int _=1;
    	//cin>>_;
    	up(i,1,_,1){
    		solve();
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    5202
    时间
    1000ms
    内存
    512MiB
    难度
    4
    标签
    递交数
    14
    已通过
    9
    上传者