rt,感觉思路没什么问题,但是0pts. 评测记录 Code:
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000010
int n,m,g,u,v;
vector<int> G[MAXN],G2[MAXN];
int Max[MAXN],Ans[MAXN];
bool vis[MAXN],flag;
struct node{
int D,step;
};
void Px_(){
queue<node> q;
q.push({1,0});
while(!q.empty()){
node x=q.front();
q.pop();
for(int i=0;i<G2[x.D].size();i++){
g=G2[x.D][i];
if(!vis[g]){
Max[g]=x.step+1;
vis[g]=true;
q.push({g,x.step+1});
}
}
}
}
void Bfs(){
queue<node> q;
q.push({1,0});
while(!q.empty()){
node m=q.front();
q.pop();
for(int i=0;i<G[m.D].size();++i){
int p=G[m.D][i];
if(Max[p]==m.step+1){
Ans[p]++;
Ans[p]%=100003;
}
q.push({p,m.step+1});
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
G[u].push_back(v);
flag=true;
for(int i=0;i<G[u].size();i++){
if(!G[u][i]){flag=false;break;}
}
if(flag){G2[u].push_back(v);}
}
Px_();
Bfs();
Ans[1]=1;
for(int i=1;i<=n;i++){
printf("%d\n",Ans[i]);
}
return 0;
}