zoj2588(割边)
来源:互联网 发布:通信录管理系统c语言 编辑:程序博客网 时间:2024/05/21 17:09
/*
* this code is made by LinMeiChen
* Problem:zoj 1311
* Type of Problem:
* Thinking:
* Feeling:
*/
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<string>
#include<vector>
#include<queue>
#include<list>
using namespace std;
typedef long long lld;
typedef unsigned int ud;
#define oo 0x3f3f3f3f
using namespace std;
#define maxn 10010
#define maxm 200010
int mark[maxn], head[maxn];
int dfn[maxn*2], low[maxn*2];
int n, g_dfn, n_bg;
struct Edge
{
int v, next, id, tag;
}E[maxm];
int tol;
int bg[maxn];
void DFS(int u, int fa)
{
mark[u] = 1;
dfn[u] = low[u] = ++g_dfn;
for (int i = head[u]; i != -1; i = E[i].next)
{
int v = E[i].v;
if (!mark[v])
{
DFS(v, u);
low[u] = min(low[u], low[v]);
if (low[v] > dfn[u] && !E[i].tag)
bg[E[i].id] = ++n_bg;
}
else if (v != fa)
low[u] = min(low[u], dfn[v]);
}
}
void add(int u, int v, int id)
{
for (int i = head[u]; i != -1; i = E[i].next)
{
if (E[i].v == v)
{
E[i].tag++;
return;
}
}
E[tol].v = v;
E[tol].id = id;
E[tol].next = head[u];
head[u] = tol++;
}
void add_edge(int u, int v, int id)
{
add(u, v, id);
add(v, u, id);
}
void Init()
{
for (int i = 0; i < maxm; i++)
E[i].tag = 0;
memset(mark, 0, sizeof mark);
memset(head, -1, sizeof head);
memset(dfn, 0, sizeof dfn);
memset(low, 0, sizeof low);
memset(bg, 0, sizeof bg);
g_dfn = 1;
n_bg = 0;
tol = 0;
dfn[1] = low[1] = 1;
}
int main()
{
int T, n, m, u, v;
scanf("%d", &T);
while (T--)
{
Init();
scanf("%d%d", &n, &m);
for (int i = 1; i <= m;i++)
{
scanf("%d%d", &u, &v);
add_edge(u, v, i);
}
DFS(1, -1);
printf("%d\n", n_bg);
bool first = true;
for (int i = 1; i <= m; i++)
{
if (bg[i])
{
if (first)
first = false;
else
printf(" ");
printf("%d", i);
}
}
puts("");
if (T)
printf("\n");
}
return 0;
}
* this code is made by LinMeiChen
* Problem:zoj 1311
* Type of Problem:
* Thinking:
* Feeling:
*/
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<string>
#include<vector>
#include<queue>
#include<list>
using namespace std;
typedef long long lld;
typedef unsigned int ud;
#define oo 0x3f3f3f3f
using namespace std;
#define maxn 10010
#define maxm 200010
int mark[maxn], head[maxn];
int dfn[maxn*2], low[maxn*2];
int n, g_dfn, n_bg;
struct Edge
{
int v, next, id, tag;
}E[maxm];
int tol;
int bg[maxn];
void DFS(int u, int fa)
{
mark[u] = 1;
dfn[u] = low[u] = ++g_dfn;
for (int i = head[u]; i != -1; i = E[i].next)
{
int v = E[i].v;
if (!mark[v])
{
DFS(v, u);
low[u] = min(low[u], low[v]);
if (low[v] > dfn[u] && !E[i].tag)
bg[E[i].id] = ++n_bg;
}
else if (v != fa)
low[u] = min(low[u], dfn[v]);
}
}
void add(int u, int v, int id)
{
for (int i = head[u]; i != -1; i = E[i].next)
{
if (E[i].v == v)
{
E[i].tag++;
return;
}
}
E[tol].v = v;
E[tol].id = id;
E[tol].next = head[u];
head[u] = tol++;
}
void add_edge(int u, int v, int id)
{
add(u, v, id);
add(v, u, id);
}
void Init()
{
for (int i = 0; i < maxm; i++)
E[i].tag = 0;
memset(mark, 0, sizeof mark);
memset(head, -1, sizeof head);
memset(dfn, 0, sizeof dfn);
memset(low, 0, sizeof low);
memset(bg, 0, sizeof bg);
g_dfn = 1;
n_bg = 0;
tol = 0;
dfn[1] = low[1] = 1;
}
int main()
{
int T, n, m, u, v;
scanf("%d", &T);
while (T--)
{
Init();
scanf("%d%d", &n, &m);
for (int i = 1; i <= m;i++)
{
scanf("%d%d", &u, &v);
add_edge(u, v, i);
}
DFS(1, -1);
printf("%d\n", n_bg);
bool first = true;
for (int i = 1; i <= m; i++)
{
if (bg[i])
{
if (first)
first = false;
else
printf(" ");
printf("%d", i);
}
}
puts("");
if (T)
printf("\n");
}
return 0;
}
0 0
- zoj2588(割边)
- ZOJ2588 Burning Bridges 割边
- zoj2588 割边(含多重边)
- zoj2588—Burning Bridges (割边的求解)
- zoj2588(连通分量,求解无向图的割边)
- ZOJ2588
- 无向图边连通性 ZOJ2588 Burning Bridges
- ZOJ2588.Burning Bridges——边双连通分量,桥
- 割点、割边
- 割点、割边
- 割点 割边
- 割点、割边
- 割边
- 割边
- 割边
- 割点和割边
- 割点,割边模板
- 割点&割边模板
- 为什么用卷积滤波,而不是很简单的在频率领域内进行数据的频率处理
- php 命名空间
- JSON.stringify 语法实例讲解
- 获取硬盘序列号,CPU,mac地址等信息 win7下也行
- Gstreamer的一些基本概念与A/V同步分析
- zoj2588(割边)
- protobuf,thrift,avro之序列化性能测试
- Javascript预编译和执行过程
- 汽车坐垫的作用这么多 你都知道多少
- IOS 第三方管理库管理 CocoaPods
- C#动态创建DataTable
- symfony2路由
- 【LeetCode】Sort List 解题报告(对链表进行归并排序)
- 在Linux下编写Daemon