3486. 【NOIP2013模拟联考10】道路改建(rebuild)(2017.12A组)(tarjan缩环+拓补排序+DP+bitset)

本文介绍了一个关于图论的问题,不死将军林登·万希望通过改建单向边来控制最多的城市数量。文章提供了输入输出样例及一种解题思路,涉及强连通分量压缩和拓扑排序等算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

人称不死将军的林登·万,与他的兄弟林登·图两人的足迹踏遍了地球的每一寸土地。他们曾将战火燃遍了世界。即使是lifei888这样的强悍人物也从来没有将他彻底击败。

这一次,林登·万在N个城市做好了暴动的策划。然而,在起事的前一天,将军得知计划已经泄漏,决定更改计划,集中力量掌握一部分城市。

具体来说,有M条单向边连接着这N座城市。对于两座城市A,B,如果它们能够通过单向边直接或间接的互相到达,那么就林登·万可以同时控制A,B两座城市而不至于分散力量,反之则会被lifei888各个击破。

为了扩大成果,将军还组织了人手改建道路。这些人可以在起事前将其中一条有向边改变成双向边(注意只能改建其中一条单向边,另外M-1条单向边保持不变),现在,将军想要知道他通过改建其中一条单向边最多能控制几座城市,以及被改建的这一条单向边有多少种选择方案。

Input

第一行为两个正整数N,M。

接下来M行每行两个范围在1~N内的正整数x,y,表示有一条从x到y的单向边。

输入保证任意两点的任意方向最多只有一条边直接相连。

Output

输出共三行。

第一行一个正整数,将军最多能控制的城市数量。

第二行一个正整数L,表示有L种改建方案使得将军能控制最多的城市。

第三行L个按递增顺序给出的正整数ki,表示改建输入中的第ki条有向边能使将军能控制最多的城市。

Sample Input

输入1:

5 4

1 2

2 3

1 3

4 1

输入2:

3 4

1 2

2 1

1 3

3 1

Sample Output

输出1:

3

1

3

输出2:

3

4

1 2 3 4

Data Constraint

对于30%的数据,N,M<=10;对于60%的数据,N<=1500,M<=100000

对于100%的数据,N<=2000 M<=N*N
想法:
用tarjan把每个强连通分量缩成点
将新的图拓补排序,正反都要
然后设f1[i]表示i能到达的集合,f2[i]表示能到达i的集合
这个用bitset存
然后对与每个修改前的边(u,v),新的强连通分量为f1[u]&f2[v],
然后新的强连通分量,与原图其他强连通分量最多1个数的即为修改这条边的答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值