Uva 796 Critical Links (割边+排序)
2024-09-05 13:54:14
题目链接:
题目描述:
题目中给出一个有可能不连通的无向图,求出这个图的桥,并且把桥按照起点升序输出(还有啊,还有啊,每个桥的起点要比终点靠前啊),这个题目读了好几遍,但是依旧没有找到数据范围写在哪里,经过无数次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 ;
}
最新文章
- [LeetCode] Bitwise AND of Numbers Range 数字范围位相与
- NTFS系统的ADS交换数据流
- 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
- day15_集合第一天
- Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控
- $.extend abc
- probuf了解
- iOS 伐码猿真爱—「偷懒 || 效率 工具类」
- 数组的处理方法,filter的用法
- [综述]Deep Compression/Acceleration深度压缩/加速/量化
- 程序员50题(JS版本)(二)
- js 数组插入和删除处理
- cocos2d-x3.0 Vector和Map简单使用
- 02-HTML5新的input属性
- C# 反射总结 获取 命名空间 类名 方法名
- (转)Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning
- wow.js
- POJ2270&;&;Hdu1808 Halloween treats 2017-06-29 14:29 40人阅读 评论(0) 收藏
- ios实例开发精品文章推荐(7.23)
- 删除N天前的备份文件脚本(windows)