您的位置:首页 > 产品设计 > UI/UE

[jzoj]3486. 【NOIP2013模拟联考10】道路改建(rebuild)(缩环+Tarjan+拓扑+bitset记录状态)

2017-12-05 14:11 393 查看
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

Solution

首先吐槽一下这道题的题目描述.

应该是最大的强联通分量

而并非强联通分量的和.

我们考虑用bitset维护状态

设f1[i]表示i能到达的点

f2[i]表示能到达i的点.

每次修改一条边u,v,增添边v−>u,则f1yi & f2xi即为新增的强联通分量.

还要存储一下其余的强联通分量最大值,然后取个max,即为当前更新一条边的最大值.

需要注意的几个地方:

一、求f1,f2要用拓扑

二、为了拓扑,需要缩点成一个DAG

三、注意些正版Tarjan,我现在才发现以前写的Tarjan都是错的!!!!!每次能找到强联通分量,但却并不是最大的.

用set可以参考Cold_chair大爷的博客.

感谢lin大爷赐教.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: