3月30日
Posted wolf940509
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3月30日相关的知识,希望对你有一定的参考价值。
早上的开题答辩似乎是很水的样子,不过好像班上还是有一个人没通过,最后竟然发现我们这组的大boss是王伟,然后就没有然后了QAQ
poj3256
题意:有k头牛,n个顶点,m条路径,第i头牛从t[i]出发,问有多少个点是所有牛都可以到达的
分析:就是统计每一个顶点会被访问几次,若访问的次数正好等于k,则就是n头牛都可以到达的顶点
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=1010; 15 int k,n,m; 16 int t[100]; //记录每次的开始位置 17 int g[maxn][maxn]; //记录两点之间是否相互可达 18 int flag[maxn]; //标记访问过的点 19 int vis[maxn]; //标记这个点被访问了几次 20 void dfs(int h) 21 { 22 flag[h]=1; 23 vis[h]++; 24 for(int i=1;i<=n;i++) 25 { 26 if(!flag[i]&&g[h][i]) 27 dfs(i); 28 } 29 } 30 int main() 31 { 32 while(cin>>k>>n>>m) 33 { 34 for(int i=0;i<k;i++) 35 scanf("%d",&t[i]); 36 memset(g,0,sizeof(g)); 37 for(int i=0;i<m;i++) 38 { 39 int x,y; 40 scanf("%d%d",&x,&y); 41 g[x][y]=1; 42 } 43 memset(vis,0,sizeof(vis)); 44 for(int i=0;i<k;i++) 45 { 46 memset(flag,0,sizeof(flag)); 47 dfs(t[i]); 48 } 49 int cnt=0; 50 for(int i=1;i<=n;i++) 51 { 52 if(vis[i]==k) 53 cnt++; 54 } 55 cout<<cnt<<endl; 56 } 57 return 0; 58 }
以上是关于3月30日的主要内容,如果未能解决你的问题,请参考以下文章