CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址

CCF CSP 201509-4 高速公路

问题描述

  某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路。
  现在,大臣们帮国王拟了一个修高速公路的计划。看了计划后,国王发现,有些城市之间可以通过高速公路直接(不经过其他城市)或间接(经过一个或多个其他城市)到达,而有的却不能。如果城市A可以通过高速公路到达城市B,而且城市B也可以通过高速公路到达城市A,则这两个城市被称为便利城市对。
  国王想知道,在大臣们给他的计划中,有多少个便利城市对。

输入格式

  输入的第一行包含两个整数nm,分别表示城市和单向高速公路的数量。
  接下来m行,每行两个整数ab,表示城市a有一条单向的高速公路连向城市b

输出格式

  输出一行,包含一个整数,表示便利城市对的数量。

样例输入

5 5
1 2
2 3
3 4
4 2
3 5

样例输出

3

样例说明


  城市间的连接如图所示。有3个便利城市对,它们分别是(2, 3), (2, 4), (3, 4),请注意(2, 3)和(3, 2)看成同一个便利城市对。

评测用例规模与约定

  前30%的评测用例满足1 ≤ n ≤ 100, 1 ≤ m ≤ 1000;
  前60%的评测用例满足1 ≤ n ≤ 1000, 1 ≤ m ≤ 10000;
  所有评测用例满足1 ≤ n ≤ 10000, 1 ≤ m ≤ 100000。

解析

有向图的强连通分量的定义是每一个分量的节点能够相互到达。因此此题可以先求解强联通分量,然后通过每一个强连通分量的个数计算城市对的数目。

强连通分量可以通过两个DFS得到,具体算法不再赘述。

代码

C++

#include <cstdio>
#include <vector>
using namespace std; void postdfs(int from, vector<vector<int> > &graph, vector<int> &postorder, vector<bool> &visited) {
for(int i=; i<graph[from].size(); i++) {
int to = graph[from][i];
if(!visited[to]) {
visited[to] = true;
postdfs(to, graph, postorder, visited);
} }
// printf("%d ", from);
postorder.push_back(from);
} int main() {
int N, M;
scanf("%d%d", &N, &M);
vector<vector<int> > graph(N+, vector<int>());
vector<vector<int> > graphRev(N+, vector<int>());
int a, b;
for(int m=; m<M; m++) {
scanf("%d%d", &a, &b);
graph[a].push_back(b);
graphRev[b].push_back(a);
}
vector<int> postorder;
vector<bool> visited(N+);
for(int n=; n<=N; n++) {
if(!visited[n]) {
visited[n] = true;
postdfs(n, graph, postorder, visited);
}
} vector<int> scc;
visited = vector<bool>(N+);
int result = ;
for(int n=N-; n>=; n--) {
int node = postorder[n];
if(!visited[node]) {
visited[node] = true;
scc.resize();
postdfs(node, graphRev, scc, visited);
// printf("%d\n", scc.size());
result += (scc.size()-) * scc.size() / ;
}
}
printf("%d\n", result);
}

CCF CSP 201509-4 高速公路的更多相关文章

  1. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  2. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  3. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  4. CCF CSP 201703

    CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...

  5. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  6. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  7. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  8. CCF CSP 201709-4 通信网络

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

  9. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

随机推荐

  1. IOS艺术字及简单的图文混排

    NSString* alertText = [NSString stringWithFormat:@" 以下%d节课程(总课酬¥%.02lf)家长们尚未结课并评价,请尽快联系家长,否则无法获 ...

  2. SecureCRT无法使用root正常连接Ubuntu 14.0.4.1的解决办法

    问题描述 通过VirtualBox重新安装了Ubuntu 14.0.4.1 虚拟服务器,在SercureCRT中使用root帐号连接Ubuntu14.0.4.1的时候,提示“Password Auth ...

  3. Hi3518 网络监控SOC芯片规格参数

    Hi3518 网络监控SOC芯片 视频编解码   处理器内核 ●   ARM926@ 440MHz,16KB I-Cache ,16KB D-Cache 视频编码 ●   H.264 Main Pro ...

  4. zookeeper系列之:独立模式部署zookeeper服务

    一.简述 独立模式是部署zookeeper服务的三种模式中最简单和最基础的模式,只需一台机器即可,独立模式仅适用于学习,开发和生产都不建议使用独立模式.本文介绍以独立模式部署zookeeper服务器的 ...

  5. Redis学习七:Redis的持久化-总结(Which one)

    1.官网建议 2.RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储 3.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些 命令来恢复原始的数据,AOF命令以red ...

  6. Python排序算法之直接插入排序

    插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表. 比如,待排序列表为[49,38,65,97,76,13,27,49 ...

  7. asp启用父路径

    开启父路径后可以用../来表示上一层目录,如果网站程序中使用了../,不开启则网站程序里有../就会报错. IIS6启用父路径方法:打开IIS管理器——网站——右键属性——主目录——配置——选项——选 ...

  8. @Resource,@Autowired,@Inject3种注入方式

    概况 @Resource,@Autowired,@Inject 这3种都是用来注入bean的,它们属于不同的程序中. ANNOTATION PACKAGE SOURCE @Resource javax ...

  9. 网页中嵌入swf文件的几种方法

    1. object + embed       传统的方法 优点:浏览器兼容性好,是 Macromedia 一直以来的官方方法缺点:a.embed 标签是不符合 W3C 的规范的,无法通过验证.当然, ...

  10. Redis—数据结构之sds

    Redis是一个Key Value数据库.Redis有5种数据类型:字符串.列表.哈希.集合.有序集合.而字符串的底层实现方法之一就是使用sds.以下描述中请读者注意区分sds是指简单动态字符串这一数 ...