A Za, A Za, Fighting...

坚信:勤能补拙

PKU 3256 Cow Picnic

问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=3256

思路:
该题是一道简单的DFS,结果却历经了很多次RE,甚至还TLE,艾...
首先,对于paths可以用二维数组paths[MAX_N][MAX_N]来表示,虽然是很自然的事情,不过还是体现了选择合适的数据结构对于解题的帮助
然后,对于每个起点(pasture in which each cow is grazing from beginning)依次深度优先搜索,并计数
所有的搜索结束之后,清点计数,若某个pasture的计数等于cows的个数,那么就是符合条件的pasture

需要注意的一点是如何避免路径中的环路,这里使用一维数组visited来标记经过的pastures

代码:
 1 void
 2 init()
 3 {
 4     int i, j, p;
 5     memset(paths, 0sizeof(paths));
 6     memset(starts, 0sizeof(starts));
 7     memset(counts, 0sizeof(counts));
 8     scanf("%d %d %d"&k, &n, &m);
 9     for(i=1; i<=k; i++)
10         scanf("%d", starts+i);
11     for(i=1; i<=m; i++) {
12         scanf("%d %d"&j, &p);
13         paths[j][p] = 1;
14     }
15 }
16 
17 void
18 solve(int index)
19 {
20     int i;
21     visited[index] = 1;
22     ++counts[index];
23     for(i=1; i<=n; i++)
24         if(paths[index][i] && !visited[i]) {
25             solve(i);
26         }
27 }
28 
29 void
30 output()
31 {
32     int i, total=0;
33     for(i=1; i<=n; i++)
34         if(counts[i] == k)
35             ++total;
36     printf("%d\n", total);
37 }


posted on 2010-07-25 14:19 simplyzhao 阅读(139) 评论(0)  编辑 收藏 引用 所属分类: B_搜索


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜