[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
应该是最大的强联通分量
而并非强联通分量的和.
我们考虑用bitset维护状态
设f1[i]表示i能到达的点
f2[i]表示能到达i的点.
每次修改一条边u,v,增添边v−>u,则f1yi & f2xi即为新增的强联通分量.
还要存储一下其余的强联通分量最大值,然后取个max,即为当前更新一条边的最大值.
需要注意的几个地方:
一、求f1,f2要用拓扑
二、为了拓扑,需要缩点成一个DAG
三、注意些正版Tarjan,我现在才发现以前写的Tarjan都是错的!!!!!每次能找到强联通分量,但却并不是最大的.
用set可以参考Cold_chair大爷的博客.
感谢lin大爷赐教.
人称不死将军的林登·万,与他的兄弟林登·图两人的足迹踏遍了地球的每一寸土地。他们曾将战火燃遍了世界。即使是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大爷赐教.
相关文章推荐
- 3486. 【NOIP2013模拟联考10】道路改建(rebuild)(2017.12A组)(tarjan缩环+拓补排序+DP+bitset)
- jzoj3501 【NOIP2013模拟联考15】消息传递(news) 树形dp
- [jzoj3472]【NOIP2013模拟联考8】匹配(match)
- JZOJ3501. 【NOIP2013模拟联考15】消息传递
- JZOJsenior3488.【NOIP2013模拟联考11】矩形(rect)
- jzoj[3521]. 【NOIP2013模拟11.7B组】道路覆盖(cover) (状压DP)
- JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)
- [jzoj]3479. 【NOIP2013模拟联考9】工作安排(work)
- jzoj. 3450. 【NOIP2013模拟联考3】山峰(summits)
- jzoj3450【NOIP2013模拟联考3】山峰(summits,dfs)
- [jzoj]3480. 【NOIP2013模拟联考9】阿Q的停车场(park)(线段树+堆)
- [jzoj]3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)(匈牙利-二分图最大匹配)
- jzoj. 3521. 【NOIP2013模拟11.7B组】道路覆盖(cover)
- jzoj 3467. 【NOIP2013模拟联考7】最长上升子序列(lis) dfs+lis+手工栈
- [jzoj]3499. 【NOIP2013模拟联考15】人类基因组(genes) (单调队列、前缀和、线段树解一题)
- [jzoj]3498. 【NOIP2013模拟联考14】图形变换(transform) (计算几何+矩阵乘法)
- JZOJ3455. 【NOIP2013模拟联考3】库特的向量(code)
- 【JZOJ 3492】【NOIP2013模拟联考12】数数(count)
- [jzoj]3468. 【NOIP2013模拟联考7】OSU!(osu) (期望DP)
- JZOJsenior3455.【NOIP2013模拟联考3】库特的向量(code)