1 条题解
-
0
更新答案数组时,如果边权不一样则直接更新掉,如果相等则叠加,最后取模
#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; }
信息
- ID
- 5202
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 14
- 已通过
- 9
- 上传者