HDU [P3849]
tarjan 求 无向图的割边 (桥)
边 (x,y) 是桥当且仅当, 对于 x 的子节点 y ,low[x] < dfn[y]
对于连向父节点的边要特殊处理
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <string>
#pragma comment(linker, "/STACK:16777216")
#include <map>
using namespace std;
const int MAXN = 10005, MAXM = 200005;
int head[MAXN], nume, n, m, dfn[MAXN], low[MAXN], ind, cnt, T, tot;
map <string, int> Hash;
string s[MAXN];
bool f[MAXM];
struct edge{
int to, nxt;
}e[MAXM];
void adde(int from, int to) {
e[++nume].to = to;
e[nume].nxt = head[from];
head[from] = nume;
}
void tarjan(int u, int id) {
dfn[u] = low[u] = ++ind;
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if(!dfn[v]) {
tarjan(v, i);
low[u] = min(low[u], low[v]);
if(low[v] > dfn[u]) {
f[i] = f[((i - 1) ^ 1) + 1] = 1;
}
}else if(i != ((id - 1) ^ 1) + 1) low[u] = min(low[u], dfn[v]);
}
}
int main() {
cin >> T;
while(T--) {
cin >> n >> m;
memset(head, 0, sizeof(head));
memset(f, 0, sizeof(f));
nume = ind = tot = cnt = 0;
memset(dfn, 0, sizeof(dfn));
memset(low, 0, sizeof(low));
Hash.clear();
for(int i = 1; i <= m; i++) {
string s1, s2;
cin >> s1 >> s2;
int u = Hash[s1];
if(!u) u = ++tot, s[u] = s1;
Hash[s1] = u;
int v = Hash[s2];
if(!v) v = ++tot; s[v] = s2;
Hash[s2] = v;
adde(u, v); adde(v, u);
}
tarjan(1, 0);
int fff = 1;
for(int i = 1; i <= tot; i++) if(!dfn[i]) {fff = 0;break;}
if(!fff) {
printf("0\n"); continue;
}
for(int i = 1; i <= nume; i++) if(f[i]) cnt++;
cnt /= 2;
cout << cnt << endl;
for(int i = 1; i < nume; i += 2) {
if(f[i]) cout << s[e[((i - 1) ^ 1) + 1].to] << " " << s[e[i].to] << endl;
}
}
}
HDU [P3849]的更多相关文章
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- hdu 4329
problem:http://acm.hdu.edu.cn/showproblem.php?pid=4329 题意:模拟 a. p(r)= R'/i rel(r)=(1||0) R ...
随机推荐
- SummerVocation_Learning--java的自动打包与解包
Auto Boxing: 自动将基础类型转换成对象(JDK1.5之后支持) Auto UnBoxing:自动将对象转换成基础类型 如 Map中的put方法,如果要传入键值对<a,1>,&l ...
- 1037: [ZJOI2008]生日聚会Party
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3121 Solved: 1858[Submit][Status][Discuss] Descript ...
- 1045: [HAOI2008] 糖果传递
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4897 Solved: 2457[Submit][Status][Discuss] Descript ...
- JavaScript日期加减
JS中的日期加减使用以下方式: varcurrentDate = new Date(); 对日期加减: date.setDate(date.getDate()+n); 对月加减: date.setMo ...
- vue.js 二 路由懒加载
当项目小的时候,我没考虑要去找这个得解决方案,也幸好现在几乎能迁移的项目都整合在了一个vue的项目里面 才发现编译后的vendor.js变得异常的大,而且几乎在项目每一个页面都需要加载这一个js,项目 ...
- webpack的配置处理
1.webpack对脚本的处理 1.Js用什么loader加载? 1>webpack 本身就支持js的加载, 2>通过babel-loader ES2015 加载js,再用 babel-p ...
- 【php】如何配置自主域名腾讯企业邮箱
腾讯企业邮配置 protocal ssl smtp port 465 host smtp.exmail.qq.com user email account passwd email passwd
- GoF23种设计模式之创建型模式之单态模式
1概述 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2适用性 1.当类只能有一个实例而且客户可以从一个总所周知的访问点访问它的时候. 2.当这个唯一实例应该是通过子类化可扩展的,并且客户应 ...
- docker 学习(1)
Docker与容器和虚拟机 Docker跟虚拟机有什么区别啊?这个问题可以拆成两部分.因为Docker并不是什么完全独创的技术,而是属于很早便有了的容器技术,所以第一个问题就是容器与虚拟机的区别?同属 ...
- The 2016 ACM-ICPC Asia Shenyang Regional Contest
A. Thickest Burger 大数 × 2 + 小数 #include <cstdio> #include <algorithm> using namespace st ...