CSP 201709-4 通信网络(30分,运行超时)
题目
自行百度
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。最近刚看了左神的算法课,所以想用用他所给的存储图的结构体。但显然,对于这道题来说这样定义结构体就过于复杂了,但是但是!就是想拿来练练手、复习一下左神的结构体。
先来针对这个超时的代码小结一下吧。
- 当然是这个复杂的结构体啊。
一个图需要3个结构体嵌套完成,完整地保存了每个节点的入度、出度等信息。Graph、Node、Edge这三个结构体。 - 运算符的重载
运算符的重载必须在一个结构体内!若想单独定义一个运算符重载,可以定义一个cmp的结构体,里面进行bool operator。 - 结构体的构造函数无返回值写的部分,直接
struct name{int x;int y;name(int x2,int y2){x=x2;y=y2;}
};
- 掌握递归DFS和非递归DFS的写法
非递归的DFS用到了栈。注意若想要找到所有的通路,则在弹出一个节点进行处理后,需要将该节点再先压回到栈中,再压入我们将要遍历的下一个节点。具体请看代码和我的语雀知识库图那节。 - set容器由于自动排序,所以在insert的时候最好insert一个基本类型的变量,不然还得写重构函数,麻烦。
- 各个容器的STL库函数的使用!!
总结
还不是100分,有待再做!
CSP 201709-4 通信网络(30分,运行超时)相关推荐
- CSP认证201709-4 通信网络[C++题解]:dfs、建立两张图:正向建图和反向见图、统计联通点的个数
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 这题就是判断每个点的连通性,如果能够到达所有的n个点,就表示该点满足题意. 这里的连通性指的是自己沿着正向边能够到达哪些点,还有就是 ...
- 基站机房:保障通信网络稳定,如何解决安全隐患?
基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义. 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络 ...
- CSP201903-4消息传递接口 从30分到AC 反思日记
CSP消息传递接口201903-4 从30分到AC 掉坑反思 CSP201903-4 题目描述 错误原因 思路 库函数的使用 代码一 代码二 CSP201903-4 题目描述 原题传送 这道题我在30 ...
- CCF201709-4 通信网络(100分)【DFS+BFS】
试题编号: 201709-4 试题名称: 通信网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只 ...
- 通信工程论文 通信网络中故障数据优化检测仿真研究
通信网络中故障数据优化检测仿真研究 专业:通信工程 2022年5月 论文题目:通信网络中故障数据优化检测仿真研究 学科专业:通信工程 摘 要 在对通信网络之中的故障数据进行检测时,考虑到在通信网络之中 ...
- 通信网络基础期末复习-第五章-路由算法
写在前面:本文主要依据为<通信网络基础>李建东,盛敏编著,如有侵权,请联系作者删除.本文仅用于个人期末复习与知识结构的搭建. 文章目录 第五章 路由算法 5.1 路由算法概述 5.1.1路 ...
- 核心网upf作用_高性能5G核心网,动力从何而来? 核心网,是整个通信网络的大脑,是不可或缺的重要组成部分。 网络的管理控制、鉴权认证等关键功能,主要由核心网负责。核心网的... - 雪球...
来源:雪球App,作者: 鲜枣课堂,(https://xueqiu.com/7282046183/152278945) 核心网,是整个通信网络的大脑,是不可或缺的重要组成部分. 网络的管理控制.鉴权认 ...
- 通信网络与IP网络知识梳理
计算机网络通常处在网络的边缘,比如数据中心,它在乎的是互联互通的结果以支撑业务的平稳高效运行,而通信网络则处在网络的中心,比如各种交换机,路由器,它在乎的是如何实现互联互通.近几年来随着数据中心网络技 ...
- 【5G通信网络架构与5G基站架构概述】
目录 一.移动通信网络架构 二.移动通信网络端到端的通信架构 三.5G网络架构 四.5G基站架构 五.5G RAN架构 六.5G 宏基站/微小站 一.移动通信网络架构 首先,我们先来了解一下移动通信网 ...
最新文章
- 其实,我是一名程序员!
- Linux服务名重命名
- Apple-Watch开发2 APPIcon设置
- 关于CSS样式清除浮动的总结
- using的几种用法
- SageMaker使用托管容器训练本地网络模型
- python面向对象(2)—— 继承(1)
- 没有互联网,我不会写程序了
- ant 驱动 svnkit 下载代码
- APACHE 403 FORBIDDEN错误的解决办法之一
- 数据传递型情景下事件机制与消息机制的架构设计剖析(目录)
- Oracle的BI解决方案
- mysql一对多查询合并多的一方的数据。
- java实现MD5加密的三种方式
- Python处理Excel数据的方法
- AppSpider:Xposed+JustTrustMe关闭SSL证书验证
- 解析eas webservice
- 解决Adobe Reader 打开PDF文件10秒左右自动关闭问题
- 麻将胡牌算法的Java实现
- java基于ssm+mysql学生课程表现作业评价系统
热门文章
- wamp打开之后变黄色
- 使用simulink生成Autosar C/S接口代码
- 知名大学25岁男博士生,状告女副教授“强迫其发生性关系”!校方回应!
- stm32倒计时秒表proteus_单片机课程设计倒计时秒表
- 【智慧农业】智慧众筹农业,共享农场土地租赁,家禽果树认养小程序源码开发如何低成本开发?
- linux kangle漏洞,Kangle EP漏洞:多个EP主机可重复绑定域名,挂黑页的bug解析
- Visual Studio 调试器中的转储文件
- 雷赛闭环步进电机驱动跟上位机通讯CL2C-RS86增加、
- 课题-基于安卓androidstudio的校园外卖app
- 消息称腾讯调整涨薪机制:打破员工每年4月必涨薪原则!