通信网络

201709-4

  • 一看到题目分析了题意之后,我就想到用floyd算法来求解每一对顶点的最短路。如果一个点和任意一个点都有最短路(不为INF),那么这就是符合的一个答案。可是因为题目超时,只能拿60分。
  • 另一种解法就是使用dfs把图简单的遍历一遍就可以了。这里要用到两遍dfs反着也要建图。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int INF=0X3F3F3F3F;
const int maxn=1003;
int n,m;
int map[maxn][maxn];
int map1[maxn][maxn];
bool vis[maxn];
bool vis1[maxn];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
memset(map,INF,sizeof(map));
memset(map1,INF,sizeof(map1));
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
map[a][b]=1;
map1[b][a]=1;
}
for(int i=1;i<=n;i++){
map[i][i]=0;
map1[i][i]=0;
vis[i]=true;
vis1[i]=true;
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
map1[i][j]=min(map1[i][j],map1[i][k]+map1[k][j]);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]==INF&&map[j][i]==INF&&map1[i][j]==INF&&map1[j][i]==INF){
vis[i]=false;
break;
}
}
if(vis[i]){
ans++;
//cout<<i<<endl;
}
}
cout<<ans<<endl;
//system("pause");
return 0;
}

以下是100分的使用dfs求解的算法代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
const int maxn=1003;
int n,m;
bool vis1[maxn];
bool vis2[maxn];
vector<int> v1[maxn];
vector<int> v2[maxn];
void dfs(int i){
for(int j=0;j<v1[i].size();j++){
if(!vis1[v1[i][j]]){
vis1[v1[i][j]]=true;
dfs(v1[i][j]);
}
}
}
void dfsr(int i){
for(int j=0;j<v2[i].size();j++){
if(!vis2[v2[i][j]]){
vis2[v2[i][j]]=true;
dfsr(v2[i][j]);
}
}
} int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
v1[a].push_back(b);
v2[b].push_back(a);
}
int ans=0;
for(int i=1;i<=n;i++){
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
vis1[i]=true;
dfs(i);
vis2[i]=true;
dfsr(i);
bool flag=true;
for(int j=1;j<=n;j++){
if(!vis1[j]&&!vis2[j]){
flag=false;
break;
}
}
if(flag)
ans++;
}
cout<<ans<<endl;
//system("pause");
return 0;
}

最新文章

  1. 从I/O复用谈epoll为什么高效
  2. HDMI之CEC DDC学习笔记(可能有误)
  3. sklearn学习笔记1
  4. html5添加音乐包括暂停
  5. UVA11324 强连通+dp记忆化搜索
  6. SAP B1 ADDON 开发
  7. IO流07_输入输出流总体系
  8. MySQL 忘记密码后的重置操作
  9. 符号表实现(Symbol Table Implementations)
  10. 路径中“/” &quot;\&quot; &quot;\\&quot;的区别
  11. Linux -- ls只显示目录
  12. 数据分区------《Designing Data-Intensive Applications》读书笔记9
  13. 2018上c语言第0次作业
  14. Dubbo+Nacos做注册中心和配置中心
  15. docker mysql 主主同步
  16. 自动化运维工具 SaltStack 搭建
  17. ThreadLocal 与 Request 和 Session 之关联
  18. LR中错误代号为27796的一个解决方法
  19. Serega and Fun CodeForces - 455D (分块 或 splay)
  20. hashlib模块 md5 sha1

热门文章

  1. 洛谷 P1429 平面最近点对(加强版) (分治模板题)
  2. Codeforces #6241 div2 C. Orac and LCM (数学)
  3. .NET并发编程-函数闭包
  4. OpenStack Train版-15.创建并挂载存储卷
  5. 在Python中使用BeautifulSoup进行网页爬取
  6. 洛谷p1966 火柴排队 (逆序对变形,目标排序
  7. JVM系列之一 JVM的基础概念与内存区域
  8. SASS CSS3 koala
  9. React + GraphQL 2020 速成课程
  10. webpack defineConstants