雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

牛是否可以都到达某点——pku3256 Cow Picnic

Posted on 2011-07-29 10:03  huhuuu  阅读(241)  评论(0编辑  收藏  举报
开始用floyd可以,不过时间太慢了(N*N*N)
后来枚举牛做DFS连通性检验,O(N*M)
View Code
#include<stdio.h>
#include
<string.h>
int net[1009][1009];
bool visit[1009];
int cow[109];
int c[1009];

void dfs(int x)
{
c[x]
++;
visit[x]
=1;
for(int i=1;i<=net[x][0];i++)
{
if(!visit[net[x][i]])
dfs(net[x][i]);
}
}

int main()
{
int k,n,m;
while(scanf("%d%d%d",&k,&n,&m)!=EOF){
int i,j;
for(i=1;i<=k;i++){
scanf(
"%d",&cow[i]);
}
for(i=0;i<=n;i++){
c[i]
=0;
for(j=0;j<=n;j++){
net[i][j]
=0;
}
}

for(i=1;i<=m;i++){
int x,y;
scanf(
"%d%d",&x,&y);
net[x][
++net[x][0]]=y;
}

for(i=1;i<=k;i++){
memset(visit,
0,sizeof(visit));
dfs(cow[i]);
}

int all=0;
for(i=1;i<=n;i++){
if(c[i]==k)
all
++;
}

printf(
"%d\n",all);
}
}