zoukankan      html  css  js  c++  java
  • 通信网络(CCF)【图的遍历】

    问题描述
      某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只能单向传递信息,即一条从部门a到部门b的通路只能由ab传递信息。信息可以通过中转的方式进行传递,即如果a能将信息传递到bb又能将信息传递到c,则a能将信息传递到c。一条信息可能通过多次中转最终到达目的地。
      由于保密工作做得很好,并不是所有部门之间都互相知道彼此的存在。只有当两个部门之间可以直接或间接传递信息时,他们才彼此知道对方的存在。部门之间不会把自己知道哪些部门告诉其他部门。

      上图中给了一个4个部门的例子,图中的单向边表示通路。部门1可以将消息发送给所有部门,部门4可以接收所有部门的消息,所以部门1和部门4知道所有其他部门的存在。部门2和部门3之间没有任何方式可以发送消息,所以部门2和部门3互相不知道彼此的存在。
      现在请问,有多少个部门知道所有N个部门的存在。或者说,有多少个部门所知道的部门数量(包括自己)正好是N
    输入格式
      输入的第一行包含两个整数NM,分别表示部门的数量和单向通路的数量。所有部门从1到N标号。
      接下来M行,每行两个整数ab,表示部门a到部门b有一条单向通路。
    输出格式
      输出一行,包含一个整数,表示答案。
    样例输入
    4 4
    1 2
    1 3
    2 4
    3 4
    样例输出
    2
    样例说明
      部门1和部门4知道所有其他部门的存在。
    评测用例规模与约定
      对于30%的评测用例,1 ≤ N ≤ 10,1 ≤ M ≤ 20;
      对于60%的评测用例,1 ≤ N ≤ 100,1 ≤ M ≤ 1000;
      对于100%的评测用例,1 ≤ N ≤ 1000,1 ≤ M ≤ 10000。
    AC代码:
    #include<bits/stdc++.h>
    
    using namespace std;
    #define N 252000
    vector<int> v[N];
    int vis[N];
    int arr[2500][2500];
    void dfs(int s,int t){
        vis[s]=1;
        arr[s][t]=1;arr[t][s]=1;
        for(int j=0;j<v[s].size();j++){
            if(vis[v[s][j]]==0){
                dfs(v[s][j],t);    
            }
        }
    }
    int main(){
        int n,m;
        cin>>n>>m;
        for(int i=0;i<m;i++){
            int x,y;
            cin>>x>>y;
            v[x].push_back(y);
        }
        for(int i=1;i<=n;i++){
            memset(vis,0,sizeof(vis));
            dfs(i,i);
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            int flag=1;
            for(int j=1;j<=n;j++){
                if(arr[i][j]==0||arr[j][i]==0){
                    flag=0;
                    break;
                }
            }
            if(flag){
                ans++;
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    解決 centos -bash: vim: command not found
    linux环境下安装tomcat6
    由于防火墙限制无法访问linux服务器上的tomcat应用
    linux环境下安装jdk1.6
    JSP输出HTML时产生的大量空格和换行的去除方法
    git使用
    Python+selenium+eclipse+pydev自动化测试环境搭建
    jmeter 打不开 提示“Not able to find Java executable or version”的解决办法
    appium如何解决每次都要安装apk的烦恼
    appium 中手势密码的定位坐标
  • 原文地址:https://www.cnblogs.com/pengge666/p/11505412.html
Copyright © 2011-2022 走看看