求出无向图的所有边双联通分量,然后缩点就成了一颗树。

然后我们选取最大的那个边双联通分量作为根,这样我们就可以确定所有割边的方向了。

对于边双联通分量里面的边,我们随便dfs一下就可以把它变成强连通分量,方向也就确定了。

 #include <bits/stdc++.h>
using namespace std; vector<int> G[];
vector<pair<int, int>> G2[];
set<pair<int, int>> bridge;
set<pair<int, int>> ansset;
pair<int, int> old[];
int vis[];
int dfn[];
int low[];
int tag[]; void get_bridge(int cur, int father, int dep)
{
vis[cur] = ;
dfn[cur] = low[cur] = dep;
int children = ;
for (auto to : G[cur])
{
if (to != father && vis[to] == )
{
if (dfn[to] < low[cur])
low[cur] = dfn[to];
}
if (vis[to] == )
{
get_bridge(to, cur, dep + );
children++;
if (low[to] < low[cur])
low[cur] = low[to];
if (low[to] > dfn[cur])
bridge.insert({cur, to}), bridge.insert({to, cur});
}
}
vis[cur] = ;
} int dfs(int u, int tot)
{
int cnt = ;
vis[u] = true;
tag[u] = tot;
for (auto to : G[u])
{
if (ansset.find({u, to}) == ansset.end() && ansset.find({to, u}) == ansset.end() && bridge.find({u, to}) == bridge.end())
{
ansset.insert({u, to});
if (!vis[to])
cnt += dfs(to, tot);
}
}
return cnt;
} void dfs2(int cur, int fa)
{
for (auto e : G2[cur])
{
int nxt = tag[e.second];
if (nxt != fa)
{
ansset.insert({e.second, e.first});
dfs2(nxt, cur);
}
}
} int main()
{
int n, m;
scanf("%d%d", &n, &m);
int u, v;
for (int i = ; i < m; i++)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
old[i] = {u, v};
}
get_bridge(, -, );
memset(vis, , sizeof(vis));
int ans = ;
int tot = ;
int idx = ;
for (int i = ; i <= n; i++)
{
if (!vis[i])
{
int siz = dfs(i, ++tot);
if (siz > ans)
ans = siz, idx = tot;
}
}
for (auto e : bridge)
G2[tag[e.first]].push_back(e);
dfs2(idx, -);
printf("%d\n", ans);
for (int i = ; i < m; i++)
{
if (ansset.find(old[i]) == ansset.end())
printf("%d %d\n", old[i].second, old[i].first);
else
printf("%d %d\n", old[i].first, old[i].second);
}
return ;
}

Codeforces732F Tourist Reform的更多相关文章

  1. 732F Tourist Reform

    // CF 732F Tourist Reform // 思路:两遍tarjan // 找强联通分量 #include <bits/stdc++.h> using namespace st ...

  2. CodeForces 732F Tourist Reform

    边双连通分量. 这题有一点构造的味道.一个有向图,经过强连通缩点之后会形成一个有向无环图. 如果将最大的强连通分量放在顶端,其余的强连通分量都直接或间接指向他,那么这样就构造出了符合要求的图. 接下来 ...

  3. CF 732F Tourist Reform——v-SCC+dfs

    题目:http://codeforces.com/contest/732/problem/F 给无向图定向使得从每个点出发能去的点数最小值最大. SCC.点内部dfs定向.点间以siz最大的为起点反向 ...

  4. Codeforces Round #377 (Div. 2) F - Tourist Reform

    前言:关于如何求双连通分量,我们可以在tarjan搜索时标记下所有桥的位置(双连通分量(可以认为是没有桥的无向图图)即可通过删去所有桥得到),那么怎么找桥呢,对于每一条搜索到的边u->x,如果l ...

  5. Codeforces 732F. Tourist Reform (Tarjan缩点)

    题目链接:http://codeforces.com/problemset/problem/732/F 题意: 给出一个有n个点m条边的无向图,保证联通,现在要求将所有边给定一个方向使其变成有向图,设 ...

  6. CF732 F Tourist Reform——边双连通分量

    题目:http://codeforces.com/contest/732/problem/F 首先把边双缩点,边双内部 dfs 一个顺序一定是可以从每个点走到边双内部所有点的,因为它是以环为基本单位: ...

  7. 【codeforces 732F】Tourist Reform

    [题目链接]:http://codeforces.com/contest/732/problem/F [题意] 给你一张无向图; n个点,m条边; 让你把这张图改成有向边 然后定义r[i]为每个点能够 ...

  8. CF732F Tourist Reform(边双联通)

    题意 在一张有向图中,设 ri 为从点 i 出发能够到达的点的数量. 定义有向图的“改良值”为 ri 的最小值. 现给出一张无向图,要求给每条边定一个方向,使产生的有向图“改良值”最大. 输出 最大改 ...

  9. CF732F Tourist Reform[边双缩点]

    题意:给无向图每一条边定向,使得每个点可达点数$R_i$最小值尽可能大,求方案. 条件反射想到二分答案,然后看怎么检验,发现要让所有点$R_i$大于等于某一个值,首先我们关注某些特殊的子图:如果有环的 ...

随机推荐

  1. Our happy ending

    题目链接 题意: 输入n.k.L,n个数,最大值不超过L,在序列中取若干个数和能达到k的序列个数 n,k<=20 , 0<=L<=10^9 分析: 题目关键在于和k比較小,所以能够考 ...

  2. android 学习笔记四:控件

    1.android:gravity 指定控件的基本位置,比如居中.居右等位置 Top:顶部 bottom:底部 left:居左 right:居右 center_vertical:垂直居中 center ...

  3. fill函数和fill_n函数

    fill_n函数的作用是:给你一个起始点,然后再给你一个数值count和val.把从起始点开始依次赋予count个元素val的值. 注意: 不能在没有元素的空容器上调用fill_n函数 列子:     ...

  4. 【转载】VS工具使用——代码生成函数关系图

    小引:        在上篇文章<VS工具使用--代码图>中,我向大家介绍了我对工具"代码图"的发现和认识.真是感觉当自己的眼睛不再被蒙蔽的时候,会发现整个世界的美好. ...

  5. 【转载】Socket通讯原理以及TCP、IP三次握手机制分析

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  6. String 字符串基本使用

    目录 一.JavaDoc解释 二.基础属性和构造函数 三.基本方法说明 一.JavaDoc解释 String类表示字符串,所有Java程序中的字符串像是"abc"都是此类的实例,字 ...

  7. spring test---測试SpringMvc初识

    如今越来越多人使用SpringMvc来开发系统,在开发中可定须要对后台url地址请求測试,而且返回预期的结果! Spring提供的測试类MockMvc来进行url地址请求測试,使用方方式: packa ...

  8. 浅谈C#中常见的委托

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...

  9. TiDB 整体架构 结合yarn zookeeper分析架构

    TiDB 简介与整体架构| PingCAP https://www.pingcap.com/docs-cn/overview/ 真正金融级高可用 相比于传统主从 (M-S) 复制方案,基于 Raft ...

  10. 织梦DEDE后台定时分时段自动更新发布文章插件

    定时审核插件使用说明 一.立信CPA培训注册会计师考试网站 以超级管理员身份登录后台,依次选择[核心]à [定时审核管理],输入定时审核的时间段,如下图所示: 功能说明: 1. 可以设置若干时间段,在 ...