/*
不要低头,不要放弃,不要气馁,不要慌张
题意:
给一个无向图。现在要求给这个无向图的边加上方向。
定义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. Installshield调用DLL的正确姿势

    脚本如下 szDllPath = SUPPORTDIR ^ "TestCom.dll";       set oMyTest = CoCreateObjectDotNet(szDl ...

  2. Collections.reverse 代码思考-超越昨天的自己系列(13)

    点进Collections.reverse的代码瞄了眼,然后就开始了一些基础知识的收集. 现在发现知道的越多,知道不知道的越多. 列几个记录下: reverse方法源码: /** * Reverses ...

  3. java中的日期操作Calendar和Date

    1. Calendar转Date Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); 2. Date ...

  4. ion-refresher 下拉更新数据

    使用指令ion-refresher可以为容器eg:ion-scroll 和 ion-content进行拉动刷新 <ion-scroll> <ion-refresher on-refr ...

  5. Eclipse “cannot be resolved to a type” 错误

    eclipse中遇到了“XX cannot be resolved to a type”的报错信息.网上找了些资料,本文将做以简单总结.     (1)jdk不匹配(或不存在) 项目指定的jdk为“j ...

  6. WKWebView比UIWebView优越性

    1.在使用两者的过程中发现前者比后者节省内存一倍多,WKWebView 是苹果在 iOS 8 中引入的新组件,目的是给出一个新的高性能的 Web View 解决方案,摆脱过去 UIWebView 的老 ...

  7. WinZip Registry Optimizer 初体验

    WinZip Registry Optimizer是来自著名压缩软件WinZip开发团队的一种可以修复.组织和整理Windows注册表的应用程序,它可以删除无效的注册表条目,整理碎片从而提升系统性能, ...

  8. [原创]cocos2d-x研习录-第三阶 背景音乐和音效

    在游戏中,音效是一个不可或缺的部分,它可以为我们的游戏增加效果.音效在游戏中一般分为长时间的背景音乐和短促的特效音乐.Cocos2D-x支持多种常见音乐格式(mp3.wav等). Cocos2D-x提 ...

  9. JSBinding+Bridge.NET:Unity游戏热更新方案

    老版本链接如下:http://www.cnblogs.com/answerwinner/p/4469021.html 新用户不要再使用老版本了. 新版本 JSBinding 将抛弃 SharpKit ...

  10. 将应用部署到Tomcat根目录的方法 去掉url里的项目名

    在"conf/Catalina/localhost"目录下增加新的文件"ROOT.xml"(注意大小写哦),文件内容如下: <?xml version=& ...