http://codeforces.com/gym/101246/problem/G

题意:

给出一个有向图,现在可以把图中的任意一条边改为无向边,问强连通分量最多可以有多少个点,在此情况下输出所有能改的边。

思路:

先dfs求出每个点能到达的点,用一个二维数组来存一下。

接下来枚举每一条边,把 u-v 这条边改为无向边,那么如果存在一点k,满足u->k并且k->v或者v->k并且k->u,那么k肯定是在这个强连通分量当中的。这样就可以计算出修改每一条边时所对应的点的个数。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<cstdio>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+; int n, m; struct Edge
{
int u, v;
}edge[+]; int vis[maxn];
int mp[maxn][maxn]; vector<int> G[maxn]; void dfs(int u, int src)
{
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(vis[v]) continue;
vis[v]=;
mp[src][v]=;
dfs(v,src);
}
} int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
//freopen("in.txt","r",stdin);
while(~scanf("%d%d", &n, &m))
{
for(int i=;i<=n;i++) G[i].clear();
for(int i=;i<=m;i++)
{
scanf("%d%d",&edge[i].u, &edge[i].v);
G[edge[i].u].push_back(edge[i].v);
} if(m==) {puts("");puts("");continue;}
memset(mp,,sizeof(mp));
for(int i=;i<=n;i++)
{
mp[i][i]=;
memset(vis,,sizeof(vis));
vis[i]=;
dfs(i,i);
} int now, MAX=, cnt=;
int ans[+];
for(int i=;i<=m;i++)
{
now=;
int u=edge[i].u, v=edge[i].v;
for(int j=;j<=n;j++)
if(mp[u][j] && mp[j][v] || mp[v][j] && mp[j][u]) now++; if(now>MAX) {MAX=now;cnt=;ans[cnt++]=i;}
else if(now==MAX) ans[cnt++]=i;
} printf("%d\n%d\n",MAX,cnt);
for(int i=;i<cnt;i++)
{
printf("%d%c",ans[i],i==cnt-?'\n':' ');
}
}
return ;
}

Gym 101246G Revolutionary Roads的更多相关文章

  1. 【DFS】【枚举】Gym - 101246G - Revolutionary Roads

    给你一张有向图,问你将任意一条边变成双向后,所能得到的最大强连通分量的大小. 缩点之后,预处理can(i,j)表示i能到j. 之后枚举每一条边(u,v),再枚举其他所有点t,如果can(u,t) &a ...

  2. Codeforces Gym 100338C Important Roads 最短路+Tarjan找桥

    原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...

  3. Codeforces Gym101246G:Revolutionary Roads(DFS+思维)

    http://codeforces.com/gym/101246/problem/G 题意:有一个n个点m条边的有向图,现在可以修改某一条有向边使得其为无向边,问修改哪些边可以使得修改后的强连通分量的 ...

  4. 【枚举】【DFS序】Gym - 101617G - Rainbow Roads

    题意:一颗树,每条边有个颜色,一条路径被定义为“彩虹”,当且仅当其上没有长度大于等于2的同色子路径.一个结点被定义为“超级结点”,当且仅当从其发出的所有路径都是“彩虹”. 枚举所有长度为2,且同色的路 ...

  5. gym 101889I Imperial roads 最小生成树+LCA

    题目传送门 题意: 给出一幅无向带权图,q次询问,每次询问都求一棵包含给出的边的最小生成树. 思路: 首先求出最小生成树(kruskal),如果查询的边在最小生成树上,肯定是直接输出最小生成树,如果不 ...

  6. codeforces Gym 100338C Important Roads (重建最短路图)

    正反两次最短路用于判断边是不是最短路上的边,把最短路径上的边取出来建图.然后求割边.注意重边,和卡spfa. 正权,好好的dijkstra不用,用什么spfa? #include<bits/st ...

  7. Gym - 100338C Important Roads 最短路+tarjan

    题意:给你一幅图,问有多少条路径使得去掉该条路后最短路发生变化. 思路:先起始两点求两遍单源最短路,利用s[u] + t[v] + G[u][v] = dis 找出所有最短路径,构造新图.在新图中找到 ...

  8. 要back的题目 先立一个flag

    要back的题目 目标是全绿!back一题删一题! acmm7 1003 1004 acmm8 1003 1004 sysu20181013 Stat Origin Title Solved A Gy ...

  9. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

随机推荐

  1. windows 下,go语言 交叉编译

    http://bbs.csdn.net/topics/390601048 参考上面的操作

  2. SpringMVC XXX-servlet.xml ApplicationContext.xml

    因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applicationContext.xml是如何区别的,其实如果直接使用SpringMVC是可以不添加applic ...

  3. 有限制的最短路spfa+优先队列

    poj1724 ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10751   Accepted: 3952 De ...

  4. linux查看日志文件内容命令tail、cat、tac、head、echo、vi

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...

  5. docker :no such file or directory

    ---恢复内容开始--- 其中最主要的问题是:details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: ...

  6. 170515、mybatis批量操作

    //Java代码 public void batchAdd(){ SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSession(); Stud ...

  7. 扫描类APP推荐

    扫描全能王 (com.intsig.camscanner) - 5.10.0.20190426 - 应用 - 酷安网 应该是手机上最好的扫描类 APP 了,没有之一.只是因为付费太贵. 感谢酷安评论区 ...

  8. 程序入口函数和glibc及C++全局构造和析构

    分类: CRT Machnasim 2011-06-15 17:45 144人阅读 评论(0) 收藏 举报 c++汇编linuxlist语言编译器 1,程序入口函数和初始化 操作系统在装载可执行文件后 ...

  9. MAC OSX

    你可以输入下面的命令来查看IPv4端口:(最好加 sudo) # lsof -Pnl +M -i4

  10. [Python模块学习]用qrcode模块生成二维码

    转自:https://blog.csdn.net/jy692405180/article/details/65937077