/*
不要低头,不要放弃,不要气馁,不要慌张
题意:
给一个无向图。现在要求给这个无向图的边加上方向。
定义f(x)为从x点出发能够到达的点的数目。
使得MIN(f(x))最大。 思路:
先tarjan找边双分量,然后从点数最大的边双分量开始dfs。
就酱。 中午老妈刚给我打电话问感冒没,我说没有,晚上就发烧了 gg
*/ #include<bits/stdc++.h>
#define N 400050
using namespace std;
int ednum;
struct edge{
int nn;
int id;
edge *next;
};
edge edges[N<<];
edge *adj[N];
struct st{
st(){}
st(int a,int b,int c){
s=a;e=b;xu=c;
}
int s,e,xu;
};
vector<st>ans;
inline void addedge(int a,int b,int c){
edge *tmp=&edges[ednum++];
tmp->id=b;
tmp->nn=c;
tmp->next=adj[a];
adj[a]=tmp;
}
int dfn[N],low[N],id[N],s[N],p,num,t,son[N],nnm[N];//dfn记录dfs时间戳
//low代表当前点到达的最小时间戳,id对点进行分组编号.num是时间戳
//s临时存储数据的手工栈,p栈顶元素的位置,son记录儿子因为无向图记录边都是两个边
void tarjan(int pos){
dfn[pos]=low[pos]=++num;
s[++p]=pos;
for(edge *it=adj[pos];it;it=it->next){
if(!dfn[it->id]){
son[pos]=it->id;
tarjan(it->id);
}
if(son[it->id]!=pos){
low[pos]=min(low[pos],low[it->id]);
}
}
if(low[pos]==dfn[pos]){
t++;
int y;
do{
nnm[t]++;
y=s[p--];
id[y]=t;
}while(y!=pos);
}
}
bool vis[N];
bool vvis[N];
void dfs(int pos){
vis[pos]=;
for(edge *it=adj[pos];it;it=it->next){
if(!vis[it->id]){
son[pos]=it->id;
dfs(it->id);
}
if(son[it->id]!=pos&&!vvis[it->nn]){
vvis[it->nn]=;
ans.push_back(st(pos,it->id,it->nn));
}
}
}
bool cmp(st a,st b){
return a.xu<b.xu;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
addedge(a,b,i);
addedge(b,a,i);
}
tarjan();
int pos,nnn=-;
for(int i=;i<=t;i++){
if(nnn<nnm[i]){
pos=i;
nnn=nnm[i];
}
}
printf("%d\n",nnn);
for(int i=;i<=n;i++){
if(id[i]==pos){
memset(vis,,sizeof(vis));
memset(son,,sizeof(son));
dfs(i);
break;
}
}
sort(ans.begin(),ans.end(),cmp);
for(int i=;i<ans.size();i++){
printf("%d %d\n",ans[i].e,ans[i].s);
}
}

Codeforces 732F [边双联通分量][tarjan]的更多相关文章

  1. 无向图边双联通分量 tarjan 模板

    #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int MAXM = 500005 ...

  2. poj-3177(并查集+双联通分量+Tarjan算法)

    题目链接:传送门 思路: 题目要将使每一对草场之间都有至少两条相互分离的路径,所以转化为(一个有桥的连通图至少加几条边才能变为双联通图?) 先求出所有的桥的个数,同时将不同区块收缩成一个点(利用并查集 ...

  3. 『Tarjan算法 无向图的双联通分量』

    无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...

  4. 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)

    题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...

  5. Tarjan 强连通分量 及 双联通分量(求割点,割边)

    Tarjan 强连通分量 及 双联通分量(求割点,割边) 众所周知,Tarjan的三大算法分别为 (1)         有向图的强联通分量 (2)         无向图的双联通分量(求割点,桥) ...

  6. POJ2942 Knights of the Round Table【Tarjan点双联通分量】【二分图染色】【补图】

    LINK 题目大意 有一群人,其中有一些人之间有矛盾,现在要求选出一些人形成一个环,这个环要满足如下条件: 1.人数大于1 2.总人数是奇数 3.有矛盾的人不能相邻 问有多少人不能和任何人形成任何的环 ...

  7. 图连通性【tarjan点双连通分量、边双联通分量】【无向图】

    根据 李煜东大牛:图连通性若干拓展问题探讨 ppt学习. 有割点不一定有割边,有割边不一定有割点. 理解low[u]的定义很重要. 1.无向图求割点.点双联通分量: 如果对一条边(x,y),如果low ...

  8. [J]computer network tarjan边双联通分量+树的直径

    https://odzkskevi.qnssl.com/b660f16d70db1969261cd8b11235ec99?v=1537580031 [2012-2013 ACM Central Reg ...

  9. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

随机推荐

  1. track by

    ng-repeat指令中使用track by子语句解决重复数据遍历的错误 <li ng-repat="x in [2, 2]" ng-bind="x"&g ...

  2. 怎么学JavaScript?

    作者:小不了链接:https://zhuanlan.zhihu.com/p/23265155来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 鉴于时不时,有同学私信问我( ...

  3. github最简单的操作方法

    其实,说实话,到目前为止,我还没有研究透那些gitbush上面的命令,所以,往github上面上传自己的文件,我采用最简单的操作方式.嘻嘻.下面,将为大家讲述一下. 首先,要在github上面注册新用 ...

  4. 自动换行(word-wrap:break-word;word-break:break-all)

    word-wrap:break-word; 自动换行,不把单词拆开 word-break:break-all; 自动换行,拆开单词 white-space:nowrap; 文本不会换行,文本会在同一行 ...

  5. nodejs-2:模块与包管理工具

    多人协作时,大量的js文件批量的引入到页面中,会出现变量被覆 盖掉方法被重写掉的情况,特别是存在一些依赖关系的时候,还容 易导致页面出错,这是因为js天生就缺少一种模块的管理机制来 隔离实现功能的js ...

  6. Bash漏洞批量检测工具与修复方案

    &amp;amp;lt;img src="http://image.3001.net/images/20140928/14118931103311.jpg!small" t ...

  7. 通过配置文件启动odoo-10.0

    odoo-10.0文件夹中找到odoo-bin,这是10.0的启动文件,也是一个py文件 使用pycharm启动后,找到run->edit configuration 找到odoo-bin 找到 ...

  8. CE取系统时间值

    取时间值: void GetTime() { //取时间值 SYSTEMTIME st = {}; // 时间结构体 GetLocalTime(&st); // 把获取的系统时间信息存储到SY ...

  9. js代码实现下拉菜单

    效果 js代码: <script type="text/javascript"> function ShowSub(li) {//函数定义 var subMenu = ...

  10. Google Java编程风格指南

    出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...