P2853 [USACO06DEC]牛的野餐Cow Picnic
你愿意的话,可以写dj。
然鹅,对一个缺时间的退役选手来说,暴力模拟是一个不错的选择。
让每个奶牛都把图走一遍,显然那些被每个奶牛都走过的点就是符合条件的点。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define N 1002 6 int val[N],in[N],k,n,m,ans; 7 bool d[N][N],vis[N]; 8 void dfs(int x,int t){ 9 vis[x]=1; val[x]+=t; 10 for(int i=1;i<=n;++i) 11 if(d[x][i]&&!vis[i]) 12 dfs(i,t); 13 } 14 int main(){ 15 scanf("%d%d%d",&k,&n,&m); 16 for(int q,i=1;i<=k;++i) 17 scanf("%d",&q),++in[q]; 18 for(int i=1,q1,q2;i<=m;++i) 19 scanf("%d%d",&q1,&q2),d[q1][q2]=1; 20 for(int i=1;i<=n;++i) 21 if(in[i]){ 22 memset(vis,0,sizeof(vis)); 23 dfs(i,in[i]); 24 } 25 for(int i=1;i<=n;++i) 26 if(val[i]==k) ++ans; 27 printf("%d",ans); 28 return 0; 29 }