Codeforces 732F [边双联通分量][tarjan]
/*
不要低头,不要放弃,不要气馁,不要慌张
题意:
给一个无向图。现在要求给这个无向图的边加上方向。
定义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]的更多相关文章
- 无向图边双联通分量 tarjan 模板
#include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int MAXM = 500005 ...
- poj-3177(并查集+双联通分量+Tarjan算法)
题目链接:传送门 思路: 题目要将使每一对草场之间都有至少两条相互分离的路径,所以转化为(一个有桥的连通图至少加几条边才能变为双联通图?) 先求出所有的桥的个数,同时将不同区块收缩成一个点(利用并查集 ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...
- Tarjan 强连通分量 及 双联通分量(求割点,割边)
Tarjan 强连通分量 及 双联通分量(求割点,割边) 众所周知,Tarjan的三大算法分别为 (1) 有向图的强联通分量 (2) 无向图的双联通分量(求割点,桥) ...
- POJ2942 Knights of the Round Table【Tarjan点双联通分量】【二分图染色】【补图】
LINK 题目大意 有一群人,其中有一些人之间有矛盾,现在要求选出一些人形成一个环,这个环要满足如下条件: 1.人数大于1 2.总人数是奇数 3.有矛盾的人不能相邻 问有多少人不能和任何人形成任何的环 ...
- 图连通性【tarjan点双连通分量、边双联通分量】【无向图】
根据 李煜东大牛:图连通性若干拓展问题探讨 ppt学习. 有割点不一定有割边,有割边不一定有割点. 理解low[u]的定义很重要. 1.无向图求割点.点双联通分量: 如果对一条边(x,y),如果low ...
- [J]computer network tarjan边双联通分量+树的直径
https://odzkskevi.qnssl.com/b660f16d70db1969261cd8b11235ec99?v=1537580031 [2012-2013 ACM Central Reg ...
- POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)
[题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...
随机推荐
- Sublime Text2 快捷键汇总
一个好的编辑器,能大大提高编程的效率.如果能熟知软件的快捷键,那更能让你得心印手.这些内容都是我网上和自己实际使用过程中所收集而来的,在网络上应该也算比较全面的了吧.欢迎大家补充,我也会在以后慢慢添加 ...
- bash 取文件特定行
比如,想要取某文件10-20行 可以用sed sed -n '10,20p' XXX.txt 非常方便!
- Tomcat笔记
总体架构: 由三部分组成:Service.Connector.Container 多个Connector对应一个Container,构成一个Service 为Service提供一个生存环境 如何处理多 ...
- ulua 路径小记 以及 lua require 机制整理
ulua 路径小记 在学习ulua时,require模块的根路径可以为项目的Lua文件夹或者ToLua文件夹(Editor下),但是在package.path和package.cpath中并没有看到当 ...
- MATLAB中fft函数的正确使用方法
问题来源:在阅读莱昂斯的<数字信号处理>第三章离散傅里叶变换时,试图验证实数偶对称信号的傅里叶变换实部为偶对称的且虚部为零.验证失败.验证信号为矩形信号,结果显示虚部是不为零且最大幅值等于 ...
- myeclipse中的weblogic 服务未正常关闭问题解决。
myeclipse中的weblogic 服务若未正常关闭,直接启动服务会出现weblogic服务被锁. 正确操作:应该将相应的服务关掉然后重启 打开任务管理器,进入进程找到javaw,将进程结束.然后 ...
- Spring JdbcTemplate方法详解
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...
- java内存分配--引用
栈内存 对象地址 堆内存 存放属性 public class TestDemo{ public static void main(String args[]){ Person perA =new ...
- 零基础如何自学MySQL数据库?
作者:姜健链接:https://www.zhihu.com/question/34840297/answer/67536521来源:知乎著作权归作者所有,转载请联系作者获得授权. 本人是个活生生的例子 ...
- python之购物车的编写(熬夜撸代码中。。。)
购物车的编写对于我这种不是很精通函数的小白来说,简直太难了.各种坑,各种无奈啊!不过总算也是写出来了! 不多说,直接上代码! #!/usr/bin/env python#用户名 sanjiang#密码 ...