zoukankan      html  css  js  c++  java
  • 2853——奶牛聚餐

    K(1≤K≤100)只奶牛分散在N(1≤N≤1000)个牧场.现在她们要集中起来进餐.牧场之间有M(1≤M≤10000)条有向路连接,而且不存在起点和终点相同的有向路.她们进餐的地点必须是所有奶牛都可到达的地方.那么,有多少这样的牧场呢?

     第1行输入K,N,M.接下来K行,每行一个整数表示一只奶牛所在的牧场编号.接下来M行,每行两个整数,表示一条有向路的起点和终点

    2 4 4
    2
    3
    1 2
    1 4
    2 3
    3 4
    

    sample output:

    2
    牧场3,4是这样的牧场.

    AC——code:

     

    #include <iostream>
    
    #include <cstdio>
    
    #include <algorithm>
    
    using namespace std;
    
    /* 整体思路:从每个奶牛所在的地方开始访问,每个节点若能被访问到,则对应的次数+1,如果某个节点次数为奶牛数,
    
    则符合题目要求 */
    
    struct nds{
    
        int y;
    
        int nxt;
    
    };
    
    struct edg{     //输入时,存边用
    
        int x;
    
        int y;
    
    };
    
    nds e[10005];
    
    edg a[10005];
    
    int lk[1005],sum;
    
    int k,n,m,ltp;
    
    int t1[105];
    
    int f[1005];
    
    int h[1005];//每次处理f数组结果时用
    
    void ist(int x,int y){
    
        e[++ltp]={y,lk[x]};
    
        lk[x]=ltp;
    
    }
    
    void dfs(int x){
    
        if(f[x]) return ;
    
        f[x]=true;
    
        for(int i=lk[x];i;i=e[i].nxt){
    
            dfs(e[i].y);
    
        }
    
    }
    
    void fun(){
    
        for(int i=1;i<=n;i++){
    
            if(f[i])
    
                h[i]++;
    
        }
    
    }
    
    int main(){
    
        cin>>k>>n>>m;
    
        for(int i=1;i<=k;i++){
    
            cin>>t1[i];
    
        }
    
        for(int i=1;i<=m;i++){
    
            cin>>a[i].x;
    
            cin>>a[i].y;
    
        }
    
        for(int i=1;i<=m;i++){
    
            ist(a[i].x,a[i].y);
    
        }
    
        for(int i=1;i<=k;i++){
    
            if(t1[i]){
    
                dfs(t1[i]);
    
                fun();
    
                for(int i=1;i<1005;i++)
    
                    f[i]=false;
    
            }
    
        }
    
        int p;
    
        for(int i=1;i<=1005;i++){
    
            if(h[i]==k){
    
                sum++;
    
            }
    
        }
    
        cout<<sum;
    
        cin>>p;
    
        return 0;
    
    } 
    
    这篇文章,是又一个故事的结束...
    lazy's story is continuing.
  • 相关阅读:
    css+ul+li方式 横向再纵向排列
    b表中有的塞给a表
    .net remoting的两种实现方式 cow
    Prism之Module cow
    2012项目总结 cow
    WCF学习笔记 cow
    也谈委托,事件和回调 cow
    理清apply(),call()的区别和关系 cow
    CLR via C#学习之线程栈,托管堆,值类型和引用类型 cow
    细说系列笔记 cow
  • 原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/14428212.html
Copyright © 2011-2022 走看看