通信网络

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;
}

CCF(通信网络):简单DFS+floyd算法的更多相关文章

  1. 【CCF】通信网络 简单搜索

    去重!不然有环就直接挂掉了...0分 #include<iostream> #include<cstdio> #include<string> #include&l ...

  2. Floyd算法简单实现(C++)

    图的最短路径问题主要包括三种算法: (1)Dijkstra (没有负权边的单源最短路径) (2)Floyed (多源最短路径) (3)Bellman (含有负权边的单源最短路径) 本文主要讲使用C++ ...

  3. 图论算法(二)最短路算法:Floyd算法!

    最短路算法(一) 最短路算法有三种形态:Floyd算法,Shortset Path Fast Algorithm(SPFA)算法,Dijkstra算法. 我个人打算分三次把这三个算法介绍完. (毕竟写 ...

  4. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  5. floyd算法 青云的机房组网方案(简单)

    青云的机房组网方案(简单) 青云现在要将 nn 个机房连成一个互相连通的网络.工程师小王设计出一个方案:通过在 nn 个机房之间铺设 n-1n−1 条双向的光纤,将所有的机房连接.可以假设数据在两个机 ...

  6. ccf认证 201709-4 通信网络 java实现

    试题编号:                                                               201709-4 试题名称: 通信网络 时间限制: 1.0s 内 ...

  7. 通信网络 ccf

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

  8. 算法笔记_069:Floyd算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 使用Floyd算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Floyd算法? Floyd算法功能:给定一个加权连通图,求取从每一个顶点到其它所 ...

  9. [图论]Floyd 算法小结

    Floyd 算法小结  By Wine93 2013.11 1. Floyd算法简介 Floyd算法利用动态规划思想可以求出任意2点间的最短路径,时间复杂度为O(n^3),对于稠密图, 效率要高于执行 ...

随机推荐

  1. Codeforces Round #646 (Div. 2) B. Subsequence Hate(前缀和)

    题目链接:https://codeforces.com/contest/1363/problem/B 题意 可以将 $01$ 串中的 $0$ 变为 $1$.$1$ 变为 $0$,问至少需要变换多少字符 ...

  2. Pokémon Army (easy version) CodeForces - 1420C1 dp

    题意: 给你一个长度为n个序列v,你需要从中找一个子序列.这个子序列的值等于:子序列中奇数下标的值-偶数下标的值 你需要使得这个值尽可能大,让你输出这个最大值 题解: dp[i][0]表示:在原序列从 ...

  3. 1569: Wet Tiles

    Description Alice owns a construction company in the town of Norainia, famous for its unusually dry ...

  4. C. New Year Book Reading

    New Year is coming, and Jaehyun decided to read many books during 2015, unlike this year. He has n b ...

  5. Java 在Word中添加多行图片水印

    Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页 ...

  6. XV6学习(15)Lab mmap: Mmap

    代码在Github上. 这一个实验是要实现最基础的mmap功能.mmap即内存映射文件,将一个文件直接映射到内存当中,之后对文件的读写就可以直接通过对内存进行读写来进行,而对文件的同步则由操作系统来负 ...

  7. 手撕 part1

    1.宏定义三个数最大值 挺有意思 max((a), (b), (c)) (a) > (b)? ((a) > (c)? (a) : (c)) ((b) > (c)? (b) : (c) ...

  8. Spring配置声明式事务

    Spring的事务有两种配置,一种是编程式,另一种是声明式,这里我们配置的是声明式事务 <?xml version="1.0" encoding="UTF-8&qu ...

  9. Inkscape tricks

    Draw straight lines: click pencil button -> click once on your canvas(starting point) -> click ...

  10. surge & free online docs website service

    surge & free online docs website service surge 自定义域的域名 https://surge.sh/help/adding-a-custom-dom ...