HDU 3836 Equivalent Sets 强连通分量分解
2016-04-30 10:42
567 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3836
题意:就是问加多少个边可以使图只有一个强连通分量,,,跟HDU 2767一样,,,
思路:强连通分量分解缩点,分别统计缩点后入度为0和出度为0的点的个数,输出其中的较大值,注意特判图原本只有一个强连通分量时答案为0的情况,不小心哇了一次。。。
题意:就是问加多少个边可以使图只有一个强连通分量,,,跟HDU 2767一样,,,
思路:强连通分量分解缩点,分别统计缩点后入度为0和出度为0的点的个数,输出其中的较大值,注意特判图原本只有一个强连通分量时答案为0的情况,不小心哇了一次。。。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N = 20010; struct edge { int to, next; }G[N*3]; int dfn , low , scc , st ; int head ; bool vis ; int index, top, num, cnt; int n, m; void init() { memset(head, -1, sizeof head); memset(dfn, -1, sizeof dfn); memset(vis, 0, sizeof vis); index = cnt = top = num = 0; } void add_edge(int v, int u) { G[cnt].to = u; G[cnt].next = head[v]; head[v] = cnt++; } void tarjan(int v) { dfn[v] = low[v] = index++; st[top++] = v; vis[v] = true; int u; for(int i = head[v]; i != -1; i = G[i].next) { u = G[i].to; if(dfn[u] == -1) { tarjan(u); low[v] = min(low[v], low[u]); } else if(vis[u]) low[v] = min(low[v], dfn[u]); } if(dfn[v] == low[v]) { num++; do { u = st[--top]; vis[u] = false; scc[u] = num; }while(u != v); } } void slove() { for(int i = 1; i <= n; i++) if(dfn[i] == -1) tarjan(i); if(num == 1) { printf("0\n"); return; } int indeg , outdeg ; memset(indeg, 0, sizeof indeg); memset(outdeg, 0, sizeof outdeg); for(int i = 1; i <= n; i++) for(int j = head[i]; j != -1; j = G[j].next) if(scc[i] != scc[G[j].to]) outdeg[scc[i]]++, indeg[scc[G[j].to]]++; int in0 = 0, out0 = 0; for(int i = 1; i <= num; i++) { if(indeg[i] == 0) in0++; if(outdeg[i] == 0) out0++; } printf("%d\n", max(in0, out0)); } int main() { int a, b; while(~ scanf("%d%d", &n, &m)) { init(); for(int i = 0; i < m; i++) { scanf("%d%d", &a, &b); add_edge(a, b); } slove(); } return 0; }
相关文章推荐
- Codeforces 667C Reberland Linguistics 记忆化搜索
- 告诉你TestNG annotations注释都是什么时候运行的
- Easui中datagrid实现动态控制columns
- hdu4027 Can you answer these queries?(成段更新)
- Errors while building APK. You can find the errors in the 'Messages' view.
- org.hibernate.exception.JDBCConnectionException: could not execute queryMySQL数据库连接超时
- Codeforces Round #349 (Div. 1) A. Reberland Linguistics 动态规划
- 海量数据存储之Key-Value存储简介
- 海量数据存储之Key-Value存储简介
- 大数据时代的 9 大Key-Value存储数据库
- 大数据时代的 9 大Key-Value存储数据库
- 浅尝key-value数据库(一)——一览NoSQL
- 浅尝key-value数据库(一)——一览NoSQL
- priority_queue的使用
- jmetter java Request
- MySQL之Field‘***’doesn’t have a default value错误解决办法
- 测试验证mysql开启binlog_rows_query_log_events参数前后的比较
- Servlet & JSP - getParameter 与 request.getAttribute 的区别
- error LNK2005: __pRawDllMain already defined in UiPlugin.obj
- POJ-2533 Longest Ordered Subsequence ( DP )