哈理工OJ 1708 许可证【临街表+dfs】
2016-02-05 14:29
225 查看
许可证 | ||||||
| ||||||
Description | ||||||
mac最近开了一家麻辣面馆,但是开面馆也不是件容易的事情,为了让广大客户相信自己面馆的权威性,mac想尽可能的获得多的许可证,但是发证的单位也不是随便就给发证的,通常情况下,发证的单位要看看店内是否有其它的相关证明,如果有才给发证。例如:mac要想获得美食局的证那么他就必须先获得卫生局的证件。现在mac手里只有一个房产证,我们将其编号为1,mac想知道他最多可以获得多少证件。 | ||||||
Input | ||||||
多组测试数据。 对于每组测试数据,第一行输入两个整数n,m(0<n, m<=100),分别表示证件的种数(编号1~n),和已知的不同证件之间的约束的关系数。 接下来的m行,每行两个正数a,b(1<=a,b<=n)表示如果mac有证件a,就可以获得证件b。 | ||||||
Output | ||||||
对于每组测试数据,输出一个整数表示mac最多可以获得的证件的种类数(包括一开始就有的1号证件)。 | ||||||
Sample Input | ||||||
4 3 1 2 2 3 3 4 | ||||||
Sample Output | ||||||
4 |
然后就用临街表走了一发,实力RE,然后就明白应该是有自环的可能,加上了几个小小的细节,最终AC~
这里说一下思路:
因为我们有证件1,所以先把能通过证件1直接能搞到的证件直接枚举出来,然后进入下一次查找,把这些能够直接搞到的证件,像刚才一样枚举他们能够直接找到的证件,也就是能通过证件1,间接搞到的证件,然后一步一步走下去 ,统计起来就能AC了~(数据比较小).
一发dfs搞定、
这里上AC代码:
#include<stdio.h> #include<string.h> #include<vector> #include<iostream> #include<algorithm> using namespace std; vector<int>a[1005]; int vis[1005]; void dfs(int x) { if(vis[x]==1) return ; vis[x]=1; for(int k=0;k<a[x].size();k++) { int u=a[x][k]; dfs(u); } return ; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) { a[i].clear(); } memset(vis,0,sizeof(vis)); while(m--) { int x,y; scanf("%d%d",&x,&y); a[x].push_back(y); } dfs(1); int output=0; for(int i=1;i<=n;i++) { if(vis[i]) output++; } printf("%d\n",output); } }
相关文章推荐
- poj2056 2010.2.20
- poj1200 2010.2.20
- iOS FMDB 不需要关闭
- DataTable、DataView、DataReader和DataSet,DataGrid等的区别
- 一元多项式的建立及其运算
- 【POI2008】【BZOJ1132】Tro
- poj2488 2010.2.20
- 怎么给kibana加上权限?
- CocoaPods 创建Podfile 导入第三方库 详细全程图文指导
- Lambda 表达式
- Android 获取屏幕的宽度和高度
- poj1129 2010.2.18
- iOS 浮点型四舍五入精确值问题
- 从头认识Spring-1.16 SpEl对集合的操作(1)-建立集合以及访问集合的元素,以<util:list/>为例
- 概率图模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-多项式贝叶斯
- 如何把SQLServer数据库从高版本降级到低版本?
- 教你如何打造完美集引导安装一体U盘
- 第一届蓝桥杯C/C++组编程题1 黑色星期五
- Exercise1_3_33
- 装IIS时遇到一个Server Application Error错误解决