题目链接:

  Uva 796 Critical Links

题目描述:

  题目中给出一个有可能不连通的无向图,求出这个图的桥,并且把桥按照起点升序输出(还有啊,还有啊,每个桥的起点要比终点靠前啊),这个题目读了好几遍,但是依旧没有找到数据范围写在哪里,经过无数次runtime error最终把范围定在1W左右。(题目晦涩难懂,wa到死了,嗷~~~~~~)

解题思路:

  就是用Tarjan算法dfs出low和dfn数组,然后记录下来起点和终点排好序的桥,然后把桥排序输出就ok了。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
struct node
{
int to, next;
} edge[maxn*];
bool cmp (node a, node b)
{
if (a.next == b.next)
return a.to < b.to;
return a.next < b.next;
}
int low[maxn], dfn[maxn], head[maxn];
int Father[maxn], tot, ntime, cnt;
node Q[maxn * ];
void init ()
{
ntime = tot = cnt = ;
memset (low, , sizeof(low));
memset (dfn, , sizeof(dfn));
memset (head, -, sizeof(head));
memset (Father, , sizeof(Father));
}
void Add (int from, int to)
{
edge[tot].to = to;
edge[tot].next = head[from];
head[from] = tot ++;
}
void Tarjan (int u, int father)
{
low[u] = dfn[u] = ++ntime;
Father[u] = father;
for (int i=head[u]; i!=-; i=edge[i].next)
{
int v = edge[i].to;
if (!dfn[v])
{
Tarjan (v, u);
low[u] = min (low[u], low[v]);
}
else if (father != v)
low[u] = min (low[u], dfn[v]);
}
}
int main ()
{
int n, m;
node q;
while (scanf ("%d", &n) != EOF)
{
init ();
m = n;
while (n --)
{
int u , k;
scanf ("%d (%d)", &u, &k);
while (k --)
{
int v;
scanf ("%d", &v);
Add (u, v);
Add (v, u);
}
}
for (int i=; i<m; i++)
if (!dfn[i])
Tarjan (i, -); for (int i=; i<m; i++)
{
int v = Father[i];
if (v != - && dfn[v] < low[i])
{
q.next = v;
q.to = i;
if (q.next > q.to)
swap(q.next, q.to);
Q[cnt++] = q;
}
}
printf ("%d critical links\n", cnt);
sort (Q, Q+cnt, cmp);
for (int i=; i<cnt; i++)
printf ("%d - %d\n", Q[i].next, Q[i].to);
printf ("\n");
}
return ;
}

最新文章

  1. [LeetCode] Bitwise AND of Numbers Range 数字范围位相与
  2. NTFS系统的ADS交换数据流
  3. 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
  4. day15_集合第一天
  5. Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控
  6. $.extend abc
  7. probuf了解
  8. iOS 伐码猿真爱—「偷懒 || 效率 工具类」
  9. 数组的处理方法,filter的用法
  10. [综述]Deep Compression/Acceleration深度压缩/加速/量化
  11. 程序员50题(JS版本)(二)
  12. js 数组插入和删除处理
  13. cocos2d-x3.0 Vector和Map简单使用
  14. 02-HTML5新的input属性
  15. C# 反射总结 获取 命名空间 类名 方法名
  16. (转)Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning
  17. wow.js
  18. POJ2270&amp;&amp;Hdu1808 Halloween treats 2017-06-29 14:29 40人阅读 评论(0) 收藏
  19. ios实例开发精品文章推荐(7.23)
  20. 删除N天前的备份文件脚本(windows)

热门文章

  1. 2015山东信息学夏令营 Day5T3 路径
  2. COGS2479(四维偏序)
  3. 二 hbase
  4. python的for else语句
  5. Chrom开发者工具详解
  6. android PercentRelativeLayout 支持百分比来设置控件的宽高
  7. android application类简单介绍(一)
  8. R语言pdf输出中文乱码处理
  9. 第一章:Android系统介绍android虚拟机
  10. iOS开发——高级篇——线程同步、线程依赖、线程组