Gym 101246G Revolutionary Roads
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的更多相关文章
- 【DFS】【枚举】Gym - 101246G - Revolutionary Roads
给你一张有向图,问你将任意一条边变成双向后,所能得到的最大强连通分量的大小. 缩点之后,预处理can(i,j)表示i能到j. 之后枚举每一条边(u,v),再枚举其他所有点t,如果can(u,t) &a ...
- Codeforces Gym 100338C Important Roads 最短路+Tarjan找桥
原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...
- Codeforces Gym101246G:Revolutionary Roads(DFS+思维)
http://codeforces.com/gym/101246/problem/G 题意:有一个n个点m条边的有向图,现在可以修改某一条有向边使得其为无向边,问修改哪些边可以使得修改后的强连通分量的 ...
- 【枚举】【DFS序】Gym - 101617G - Rainbow Roads
题意:一颗树,每条边有个颜色,一条路径被定义为“彩虹”,当且仅当其上没有长度大于等于2的同色子路径.一个结点被定义为“超级结点”,当且仅当从其发出的所有路径都是“彩虹”. 枚举所有长度为2,且同色的路 ...
- gym 101889I Imperial roads 最小生成树+LCA
题目传送门 题意: 给出一幅无向带权图,q次询问,每次询问都求一棵包含给出的边的最小生成树. 思路: 首先求出最小生成树(kruskal),如果查询的边在最小生成树上,肯定是直接输出最小生成树,如果不 ...
- codeforces Gym 100338C Important Roads (重建最短路图)
正反两次最短路用于判断边是不是最短路上的边,把最短路径上的边取出来建图.然后求割边.注意重边,和卡spfa. 正权,好好的dijkstra不用,用什么spfa? #include<bits/st ...
- Gym - 100338C Important Roads 最短路+tarjan
题意:给你一幅图,问有多少条路径使得去掉该条路后最短路发生变化. 思路:先起始两点求两遍单源最短路,利用s[u] + t[v] + G[u][v] = dis 找出所有最短路径,构造新图.在新图中找到 ...
- 要back的题目 先立一个flag
要back的题目 目标是全绿!back一题删一题! acmm7 1003 1004 acmm8 1003 1004 sysu20181013 Stat Origin Title Solved A Gy ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
随机推荐
- ExcelUtil工具类
import com.google.common.base.Strings;import com.jianwu.util.excel.annotation.ExcelAttribute;import ...
- 树链剖分+线段树+离线(广州网选赛第八题hdu5029)
http://acm.hdu.edu.cn/showproblem.php?pid=5029 Relief grain Time Limit: 10000/5000 MS (Java/Others) ...
- 170526、spring 执行定时任务
Spring 定时任务之 @Scheduled cron表达式 一.使用 Spring配置文件xmlns加入 xmlns:task="http://www.springframework.o ...
- oracle的认证方式
使用as sysdba是使用操作系统验证方式,不需要输入密码
- Dubbo学习记录
参考资料: 官网 Dubbo详细介绍与安装使用过程
- I/O排查命令
I/O可以说是问题大户,线上的问题经常都是它引起的,很多人却不知道怎么定位这种问题.今天简单介绍一下,在此抛砖引玉. 此类问题我们一般分三步定位:按系统级I/O.进程级I/O.业务级I/O定位即可,一 ...
- SQL Server批量数据导出导入BCP&Bulk使用
数据导出导入,首先考虑使用什么技术实现导出与导入利用BCP结合Bulk技术实现数据的导出与导入 1.bcp数据导出(这里是命令行方式),导出的数据需是格式化的,有两种方式可选 a.对传输的数据格式要求 ...
- mysql 数据操作 单表查询 group by 分组 目录
mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...
- python多线程为什么不能利用多核cpu
GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作 ...
- telnet到RedHat Linux失败--解决办法
失败原因: 1.telnet包未安装,检查telnet包是否安装: [root@vm-rhel root]# rpm -qa telnet telnet-0.17-25 表示已安装 2.telnet包 ...