您的位置:首页 > 其它

pku3256CowPicnic

2010-08-24 13:41 141 查看
题目链接: pku3256

思路:找出每头牛能够走的地方,最后看是否走过的牛的数目等于牛的数目的有几个地方。

代码:dfs

]// 1 ≤ K ≤ 100	1 ≤ N ≤ 1,000	 1 ≤ M ≤ 10,000
#include <iostream>
using namespace std;
int k,n,m;
bool map[1005][1005],visited[105][1005];
int loc[105];
void dfs(int t,int s)
{
visited[t][s]=1;
for(int i=1;i<=n;i++)
if(visited[t][i]==0&&map[s][i])
{
dfs(t,i);
}
}
int main(int argc, char *argv[])
{
while(scanf("%d%d%d",&k,&n,&m)!=EOF)
{
int i,j,x,y;
for(i=1;i<=k;i++)scanf("%d",&loc[i]);
memset(map,0,sizeof(map));
memset(visited,0,sizeof(visited));
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);map[x][y]=1;
}
for(i=1;i<=k;i++)
{
dfs(i,loc[i]);
}
int num=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=k;j++)
if(visited[j][i]==0)break;
if(j>k)num++;
}
printf("%d/n",num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: