zoukankan      html  css  js  c++  java
  • ccf-170904-通信网络

    ccf-170904-通信网络

    题目分析:

    有向图 如果a可以直接或者间接连接b则a与b相互知晓 一共有多少个点知道n个点

    刚开始算错复杂度,优化后反而超时 。。。事实无脑爆搜这道题也是可取的因为只有1000个点

    每次选定一个点start开始dfs,吧start所能到达的点全部找出来,记录在mp数组内,所连接点的个数记录在num[]数组中

    一个小优化 。事实不优化也能过。当dfs过程中 发现start点到达的点为n时就结束 没必要继续dfs了

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <vector>
     4 #include <cstdio>
     5 #include <cstring>
     6 using namespace std;
     7 const int N=1e3+3;
     8 vector < vector <int> > g(N);
     9 bool mp[N][N];
    10 bool visit[N];
    11 int num[N];
    12 int start;
    13 int n,m;
    14 void dfs (int root) {
    15     visit[root]=1;
    16     for (int i=0;i<g[root].size();i++) {
    17         int next=g[root][i];
    18         if (!visit[next]) {
    19             if (!mp[start][next]) {
    20                 mp[start][next]=mp[next][start]=1;
    21                 num[next]++; num[start]++;
    22                 if (num[start]>=n)  break;
    23             }
    24             dfs (next);
    25             if (num[start]>=n)   break;
    26         }
    27     }
    28     return ;
    29 }
    30 int main ()
    31 {
    32     scanf ("%d %d",&n,&m);
    33     for (int i=1;i<=n;i++) {
    34         mp[i][i]=1; num[i]++;
    35     }
    36     for (int i=1;i<=m;i++) {
    37         int x,y; scanf ("%d %d",&x,&y);
    38         g[x].push_back(y);
    39         if (!mp[x][y]) {
    40             mp[x][y]=mp[y][x]=1;
    41             num[x]++; num[y]++;
    42         }
    43     }
    44     for (int i=1;i<=n;i++)  {
    45         memset (visit,0,sizeof(visit));
    46         if (num[i]<n) { 
    47             start=i;
    48             dfs (i);
    49         }
    50     }
    51     int sum=0;
    52     for (int i=1;i<=n;i++)
    53         if (num[i]>=n)
    54             sum++;
    55     printf ("%d
    ",sum);
    56     return 0;  
    57 }
    抓住青春的尾巴。。。
  • 相关阅读:
    类的组合
    类的派生
    类的继承
    对象的高度整合
    类和数据类型
    对象的绑定方法
    对象属性查找顺序
    C++中struct和class的区别 [转]
    curl_setopt函数相关应用及介绍(转)
    linux 下如何查看和踢除正在登陆的其它用户 ==>Linux下用于查看系统当前登录用户信息的4种方法
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/8567587.html
Copyright © 2011-2022 走看看