题目

自行百度

30分代码

#include <bits/stdc++.h>
using namespace std;
int N,M;
const int maxn=1000+5;
set<int> record[maxn];//用来保存每个节点知道的节点
struct Node;
struct Edge;
struct Graph {map<int,Node> nodes;//保存节点vector<Edge>  edges;//保存边
};
Graph matrix;
struct Node {int value;//当前节点的值 int in;//当前节点的入度int out;//当前节点的出度vector<Node> nexts;//保存从这个节点可以到达的相邻点vector<Edge> edges;//保存当前节点指出去的边
};
//struct cmp{//  bool operator()(Edge a,Edge b)
//  {//      return a.weight<=b.weight;
//  }
//};
struct Edge {int weight;//边的权重Node from;//起点Node to;//终点 Edge(int w,Node f,Node t){weight=w;from=f;to=t;}
//  bool operator<(const Edge &e){//      return this->weight<=e.weight;
//  }
};
void Find(Node &node)
{//非递归DFS stack<Node> s;set<int> flag;s.push(node);flag.insert(node.value);while(!s.empty()){//      cout<<"进入while"<<endl; Node tmp=s.top();s.pop();
//      cout<<"当前节点是"<<tmp.value<<",相邻节点有"<<tmp.nexts.size()<<"个"<<endl;for(int i=0;i<tmp.nexts.size();i++){int tips=tmp.nexts[i].value;//压入 matrix.nodes[tips]
//          Node tmp2=tmp.nexts[i];if(flag.find(tips)==flag.end()){//              cout<<"计入"<<tmp2.value<<"作为备选"<<endl;s.push(tmp);s.push(matrix.nodes[tips]);flag.insert(matrix.nodes[tips].value);if(record[node.value].find(matrix.nodes[tips].value)==record[node.value].end()){record[node.value].insert(matrix.nodes[tips].value);
//                  cout<<"计入"<<tmp2.value<<"号节点,";}break;}}}//更新set容器for(set<int>::iterator it=record[node.value].begin();it!=record[node.value].end();it++){if(record[*it].find(node.value)==record[*it].end())record[*it].insert(node.value);}
}
int main()
{cin>>N>>M;int s,e;
//  Graph matrix; for(int i=1;i<=M;i++){cin>>s>>e;if(matrix.nodes.find(s)==matrix.nodes.end()) //新节点{Node tmp;tmp.in=0;tmp.out=0;tmp.value=s;matrix.nodes[s]=tmp;}if(matrix.nodes.find(e)==matrix.nodes.end()) //新节点{Node tmp;tmp.in=0;tmp.out=0;tmp.value=e;matrix.nodes[e]=tmp;}matrix.nodes[s].out++;matrix.nodes[e].in++;matrix.nodes[s].nexts.push_back(matrix.nodes[e]);matrix.nodes[s].edges.push_back(Edge(0,matrix.nodes[s],matrix.nodes[e]));Edge tmp(0,matrix.nodes[s],matrix.nodes[e]);matrix.edges.push_back(tmp);}
//  输出图的信息,看保存的对不对
//  for(int i=1;i<=N;i++){//      cout<<matrix.nodes[i].value<<" "<<matrix.nodes[i].in<<" "<<matrix.nodes[i].out<<endl;
//  }
//  for(int i=0;i<matrix.edges.size();i++){//      cout<<matrix.edges[i].from.value<<" "<<matrix.edges[i].to.value<<endl;
//  }
//  for(int i=1;i<=N;i++)
//  {//      cout<<"第"<<i<<"节点:"<<endl;
//      for(int j=0;j<matrix.nodes[i].nexts.size();j++)
//          cout<<matrix.nodes[i].nexts[j].value<<" ";
//      cout<<endl;
//  }for(int i=1;i<=N;i++){//      cout<<"第"<<i<<"节点:"<<endl;if(matrix.nodes[i].out==0){//          cout<<"出度是0!"<<endl;continue; }else Find(matrix.nodes[i]);}int cnt=0;for(int i=1;i<=N;i++){if(record[i].size()==N-1)cnt++;}cout<<cnt<<endl;return 0;
}

心得

这道题一看便想到了图+DFS。最近刚看了左神的算法课,所以想用用他所给的存储图的结构体。但显然,对于这道题来说这样定义结构体就过于复杂了,但是但是!就是想拿来练练手、复习一下左神的结构体。
先来针对这个超时的代码小结一下吧。

  1. 当然是这个复杂的结构体啊。
    一个图需要3个结构体嵌套完成,完整地保存了每个节点的入度、出度等信息。Graph、Node、Edge这三个结构体。
  2. 运算符的重载
    运算符的重载必须在一个结构体内!若想单独定义一个运算符重载,可以定义一个cmp的结构体,里面进行bool operator。
  3. 结构体的构造函数无返回值写的部分,直接
struct name{int x;int y;name(int x2,int y2){x=x2;y=y2;}
};
  1. 掌握递归DFS和非递归DFS的写法
    非递归的DFS用到了栈。注意若想要找到所有的通路,则在弹出一个节点进行处理后,需要将该节点再先压回到栈中,再压入我们将要遍历的下一个节点。具体请看代码和我的语雀知识库图那节。
  2. set容器由于自动排序,所以在insert的时候最好insert一个基本类型的变量,不然还得写重构函数,麻烦。
  3. 各个容器的STL库函数的使用!!

总结

还不是100分,有待再做!

CSP 201709-4 通信网络(30分,运行超时)相关推荐

  1. CSP认证201709-4 通信网络[C++题解]:dfs、建立两张图:正向建图和反向见图、统计联通点的个数

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 这题就是判断每个点的连通性,如果能够到达所有的n个点,就表示该点满足题意. 这里的连通性指的是自己沿着正向边能够到达哪些点,还有就是 ...

  2. 基站机房:保障通信网络稳定,如何解决安全隐患?

    基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义. 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络 ...

  3. CSP201903-4消息传递接口 从30分到AC 反思日记

    CSP消息传递接口201903-4 从30分到AC 掉坑反思 CSP201903-4 题目描述 错误原因 思路 库函数的使用 代码一 代码二 CSP201903-4 题目描述 原题传送 这道题我在30 ...

  4. CCF201709-4 通信网络(100分)【DFS+BFS】

    试题编号: 201709-4 试题名称: 通信网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只 ...

  5. 通信工程论文 通信网络中故障数据优化检测仿真研究

    通信网络中故障数据优化检测仿真研究 专业:通信工程 2022年5月 论文题目:通信网络中故障数据优化检测仿真研究 学科专业:通信工程 摘 要 在对通信网络之中的故障数据进行检测时,考虑到在通信网络之中 ...

  6. 通信网络基础期末复习-第五章-路由算法

    写在前面:本文主要依据为<通信网络基础>李建东,盛敏编著,如有侵权,请联系作者删除.本文仅用于个人期末复习与知识结构的搭建. 文章目录 第五章 路由算法 5.1 路由算法概述 5.1.1路 ...

  7. 核心网upf作用_高性能5G核心网,动力从何而来? 核心网,是整个通信网络的大脑,是不可或缺的重要组成部分。 网络的管理控制、鉴权认证等关键功能,主要由核心网负责。核心网的... - 雪球...

    来源:雪球App,作者: 鲜枣课堂,(https://xueqiu.com/7282046183/152278945) 核心网,是整个通信网络的大脑,是不可或缺的重要组成部分. 网络的管理控制.鉴权认 ...

  8. 通信网络与IP网络知识梳理

    计算机网络通常处在网络的边缘,比如数据中心,它在乎的是互联互通的结果以支撑业务的平稳高效运行,而通信网络则处在网络的中心,比如各种交换机,路由器,它在乎的是如何实现互联互通.近几年来随着数据中心网络技 ...

  9. 【5G通信网络架构与5G基站架构概述】

    目录 一.移动通信网络架构 二.移动通信网络端到端的通信架构 三.5G网络架构 四.5G基站架构 五.5G RAN架构 六.5G 宏基站/微小站 一.移动通信网络架构 首先,我们先来了解一下移动通信网 ...

最新文章

  1. 其实,我是一名程序员!
  2. Linux服务名重命名
  3. Apple-Watch开发2 APPIcon设置
  4. 关于CSS样式清除浮动的总结
  5. using的几种用法
  6. SageMaker使用托管容器训练本地网络模型
  7. python面向对象(2)—— 继承(1)
  8. 没有互联网,我不会写程序了
  9. ant 驱动 svnkit 下载代码
  10. APACHE 403 FORBIDDEN错误的解决办法之一
  11. 数据传递型情景下事件机制与消息机制的架构设计剖析(目录)
  12. Oracle的BI解决方案
  13. mysql一对多查询合并多的一方的数据。
  14. java实现MD5加密的三种方式
  15. Python处理Excel数据的方法
  16. AppSpider:Xposed+JustTrustMe关闭SSL证书验证
  17. 解析eas webservice
  18. 解决Adobe Reader 打开PDF文件10秒左右自动关闭问题
  19. 麻将胡牌算法的Java实现
  20. java基于ssm+mysql学生课程表现作业评价系统

热门文章

  1. wamp打开之后变黄色
  2. 使用simulink生成Autosar C/S接口代码
  3. 知名大学25岁男博士生,状告女副教授“强迫其发生性关系”!校方回应!
  4. stm32倒计时秒表proteus_单片机课程设计倒计时秒表
  5. 【智慧农业】智慧众筹农业,共享农场土地租赁,家禽果树认养小程序源码开发如何低成本开发?
  6. linux kangle漏洞,Kangle EP漏洞:多个EP主机可重复绑定域名,挂黑页的bug解析
  7. Visual Studio 调试器中的转储文件
  8. 雷赛闭环步进电机驱动跟上位机通讯CL2C-RS86增加、
  9. 课题-基于安卓androidstudio的校园外卖app
  10. 消息称腾讯调整涨薪机制:打破员工每年4月必涨薪原则!