#air. 2026提高组模拟赛12-T2 程老师的冗余航线

2026提高组模拟赛12-T2 程老师的冗余航线

时间限制:1000ms 内存限制:512MB

题目描述

一家支线航空公司准备精简航线网络,程老师被请去做评估。网络里有 nn 个通航城市,编号 11nn,城市之间开着 mm 条直飞航线。航线全是单向的:一条从 uuvv 的航线只提供 uu 出发、vv 到达的航班,想反向飞得看有没有另一条航线。这张网络还有个特点——早年规划时刻意避开了绕圈,从任何一个城市出发,沿航线一路飞下去,永远不可能飞回出发的城市,所以旅客不必担心转机转着转着回到原地。

评估的标准只有一条。对某条从 uuvv 的直飞航线,假设把它单独停飞、其余航线全部保留,如果旅客仍然能从 uu 飞到 vv——中途可以在别的城市转机,转几次都行——那么这条直飞航线就是"冗余"的,可以砍掉;反之,停飞之后 uu 再也到不了 vv,这条航线就是网络的命脉,必须保留。注意冗余的判定不要求"同样快",只要求"还能到",转机十次八次也算能到。

判定里几个口径需要说死。其一,一次只评估一条航线:停飞某条时其余航线全部照常,不存在"两条一起砍还能不能到"的问题。其二,转机就是到达某城后换乘从该城出发的另一条航线,不另收费用,也不考虑时刻衔接,只要航线在,旅客就能转。其三,"还能到"的起点和终点必须是被评估航线原来的起点和终点,从别的城市绕过来不算数。其四,网络里同一对城市之间至多一条单向直飞航线,但 uuvvvvuu 是两条各自独立的航线,评估时各算各的。

这里有个容易看走眼的地方:冗余不是看两城之间有没有"另一条直飞"。网络里任意两城之间本来就至多一条单向直飞航线,冗余与否取决于中转。有的航线看着孤零零的,其实旅客绕两站照样能到;也有的航线一头挑着唯一的通道,砍了就彻底断了。评估报告要逐条核对,不能凭印象。

这家公司前两年砍过一轮航线,当时全凭几位老调度对着挂图比划,结果误砍了两条命脉线,三个城市当即脱网,只好花钱复航,成了行业里的笑话。这回董事会立下规矩:评估必须给出书面依据,每条航线的结论都要能复核。第一步先把总数摸清楚——程老师需要你先给一个总数:这张网络里冗余航线一共有多少条。董事会上先拿这个数讨论砍线的空间,具体砍哪些下一步再议。

输入格式

第一行两个整数 n,mn, m,表示城市数量和航线数量。

接下来 mm 行,每行两个整数 u,vu, v,表示一条从 uuvv 的单向直飞航线。

输出格式

输出一行一个整数,表示冗余航线的数量。

数据范围

测试点编号 nn \le mm \le 特殊性质
1 ~ 4 6060
5 ~ 8 300300
9 ~ 12 50005000 10410^4 A
13 ~ 20 10510^5
  • 特殊性质 A:每条航线两端的编号之差不超过 22,即 1vu21 \le v - u \le 2
  • 对于全部数据,2n50002 \le n \le 50001m1051 \le m \le 10^51u,vn1 \le u, v \le nuvu \ne v;同一对城市之间至多一条单向航线;保证从任何城市出发沿航线飞行都不可能回到出发城市。

样例

样例 1

输入

3 3
1 2
2 3
1 3

输出

1

解释:逐条核对。停飞 121 \to 2:从 11 出发只剩 131 \to 3,到不了 22,不冗余。停飞 232 \to 3:从 22 出发别无出路,不冗余。停飞 131 \to 3:可以走 1231 \to 2 \to 3 中转一次到达,冗余。合计 11 条。

样例 2

输入

4 6
1 2
2 3
1 3
3 4
2 4
1 4

输出

3

解释:冗余的是 131 \to 3(走 1231 \to 2 \to 3)、242 \to 4(走 2342 \to 3 \to 4)、141 \to 4(走 12341 \to 2 \to 3 \to 4,转两次机也算能到)。其余三条停飞后对应起点都到不了终点,合计 33 条。

样例 3

输入

4 3
1 2
2 3
3 4

输出

0

解释:一条纯链,每条航线都是唯一的通道,停飞任何一条都当场断路,冗余航线为 00 条。

难度 提高
通过率
尝试 0
已通过 0
ID
680
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者