BZOJ 1648 Cow Picnic 奶牛野餐

作为傻逼的我,一开始就想到了DFS的正解。但是看了看数据范围 DFS的时间复杂度是(K+E)*NoW K是点 E是边 NOW是奶牛数量
掂量了下 觉得过不去,苦思冥想之后。看了下题解,卧槽这么简单吗? 发现自己看错了,把K+E 看成了K*E,惭愧惭愧~

 

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4  
 5 #define up(a,b,c) for(int c = a;c<=b;++c)
 6 #define mem(a,b) memset(a,b,sizeof(a))
 7  
 8 struct node{
 9     int u,v,next;
10     node(){}
11     node(int _u,int _v,int _next){
12         u = _u;
13         v = _v;
14         next = _next;
15     }
16 }Edge[10005];
17  
18 int k,now[233],n,m,Count,head[10005];
19 int ans[1005],tot;
20 bool vis[1005];
21  
22 void dfs(int x){
23     vis[x]=1;
24     ans[x]++;
25     for(int i=head[x];i;i=Edge[i].next){
26         if(!vis[Edge[i].v]) dfs(Edge[i].v);
27     }
28 }
29  
30 int main(){
31     scanf("%d%d%d",&k,&n,&m);
32     up(1,k,i) scanf("%d",&now[i]);
33     up(1,m,i) {
34         int x,y;
35         scanf("%d%d",&x,&y);
36         Edge[Count]=node(x,y,head[x]);
37         head[x] = Count++;
38     }
39     up(1,k,i){
40         mem(vis,0);
41         dfs(now[i]);
42     }
43     up(1,n,i){
44         if(ans[i]==k) tot++;
45     }
46     printf("%d\n",tot);
47     return 0;
48 }

 

转载于:https://www.cnblogs.com/OIerLYF/p/7496036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值