我就是想骗一骗访问量

先Tarjan搞出来所有的强连通分量

正向连边 反向连边 topsort一发  搞出来每个点可以到哪些点 和哪些点可以到这个点

对于每条边 与一下  就是答案

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=,M=N*N;
int n,m,T,jy,ans,r=;
int low[N],dfn[N],cnt,stk[N],vis[N],p[N],top;
set<int>s;
struct Edge{
bitset<N>f[N];
int mp[N][N],in[N];
void topsort(){
queue<int>q;
for(int i=;i<=T;i++)for(int j=;j<=T;j++)if(mp[i][j])in[j]++;
for(int i=;i<=T;i++)if(!in[i])q.push(i);
while(!q.empty()){
int t=q.front();q.pop();
for(int v=;v<=T;v++)if(mp[t][v]){
in[v]--,f[v]|=f[t];
if(!in[v])q.push(v);
}
}
}
}e[];
struct Road{int x,y;Road(int X=,int Y=):x(X),y(Y){};}rd[M];
void tarjan(int x){
low[x]=dfn[x]=++cnt,stk[++top]=x;vis[x]=;
for(int v=;v<=n;v++)if(e[].mp[x][v]){
if(!dfn[v])tarjan(v),low[x]=min(low[x],low[v]);
else if(vis[v])low[x]=min(low[x],dfn[v]);
}if(low[x]==dfn[x]){T++;do{jy=stk[top--],vis[jy]=;p[jy]=T;e[].f[T][jy]=e[].f[T][jy]=;}while(jy!=x);}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d%d",&rd[i].x,&rd[i].y),e[].mp[rd[i].x][rd[i].y]=;
for(int i=;i<=n;i++)if(!dfn[i])tarjan(i);
for(int i=;i<=m;i++)if(p[rd[i].x]!=p[rd[i].y])
e[].mp[p[rd[i].x]][p[rd[i].y]]=e[].mp[p[rd[i].y]][p[rd[i].x]]=;
e[].topsort();e[].topsort();
for(int i=;i<=m;i++){
int t=(int)(e[].f[p[rd[i].x]]&e[].f[p[rd[i].y]]).count();
if(ans<t)s.clear(),ans=t,s.insert(i);
else if(ans==t)s.insert(i);
}
printf("%d\n%d\n",ans,(int)s.size());
for(set<int>::iterator it=s.begin();it!=s.end();it++,r++)printf("%d%c",*it,r==s.size()?'\n':' ');
}

BZOJ 4304 tarjan+topsort+bitset的更多相关文章

  1. BZOJ.2208.[JSOI2010]连通数(bitset Tarjan 拓扑)

    题目链接 先缩点,对于scc之间贡献即为szscc[i]*szscc[j] 用f[i][j]表示scci是否能到sccj 拓扑排序,每次把now的f或上to的f 用bitset优化 //63888kb ...

  2. Luogu3119 草鉴定-Tarjan+Topsort

    Solution 简单的$Tarjan$题. 有大佬现成博客 就不写了 → 传送门 Code #include<cstdio> #include<cstring> #inclu ...

  3. 【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)

    UVA11324 The Largest Clique 题目描述 给你一张有向图 \(G\),求一个结点数最大的结点集,使得该结点集中的任意两个结点 \(u\) 和 \(v\) 满足:要么 \(u\) ...

  4. Tarjan+topsort(DP)【P3387】 [模板]缩点

    Description 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次 ...

  5. [JSOI2010]连通数 (dfs或tarjan或bitset)+bitset学习

    题目描述 输入格式 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. 输出格式 输出一行一个整数,表示该图的连通数. 样例 样 ...

  6. [bzoj 3687]简单题 bitset的运用

    题意 给定一个正整数集,求所有子集算术和的异或和   题解 每次加入一个元素x,用原集合a xor (a<< x) 然后每一个值统计一下 bitset看起来很优越,是一个能位运算的布尔数组 ...

  7. BZOJ 3687: 简单题 bitset

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...

  8. bzoj 3687 简单题——bitset

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3687 关于 bitset :https://blog.csdn.net/snowy_smil ...

  9. bzoj 1123 tarjan求割点

    #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...

随机推荐

  1. JMeter测试websocket

    今天公司要测websocket,搞了一天踩了不少坑,关键是还没爬出来,BOSS让回家再理理思路,没办法到家就开干. 一.家里玩的还是2.1的,为了少踩坑,先下个JMeter5.1.1(他们说4版本也行 ...

  2. Python进阶-操作redis

    1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建,存在则修改 r.set('name', 'z ...

  3. codechef营养题 第三弹

    第三弾が始まる! codechef problems 第三弹 一.Motorbike Racing 题面 It's time for the annual exciting Motorbike Rac ...

  4. git命令大杂烩

    查看版本库中的文件: git ls-files添加到暂存区: git add filesName|\folderName(循环递归) git add .(添加当前目录下的所有文件包括子目录,如果添加文 ...

  5. IDEA建立一个可运行的struts2项目

    参考博客:https://blog.csdn.net/shuai_wy/article/details/79027573 直接使用IDEA创建struts2项目,配置好tomcat后是跑不起来的 需要 ...

  6. Java基础学习总结(84)——Java面向对象六大原则和设计模式

    面向对象六大原则 在此之前,有一点需要大家知道,熟悉这些原则并不是说你写出的程序就一定灵活.清晰,只是为你优秀的代码之路铺上了一层栅栏,在这些原则的指导下,你才能避免陷入一些常见的代码泥沼,从而让你写 ...

  7. poj 3164 最小树形图模板!!!

    /* tle十几次,最后发现当i从1开始时,给环赋值时要注意啊! 最小树形图 */ #include<stdio.h> #include<string.h> #include& ...

  8. [51Nod1089] 最长回文子串 V2(Manacher算法)

    1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   回文串是指aba.abba.cccbccc.aaaa这种左右对称 ...

  9. [USACO1.2]挤牛奶Milking Cows

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  10. Linux tree 命令用法

    linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装:sudo apt-get install tree .文件很小,只有31K,但功能可强大了!  tree命令的参数解释 ...