51nod1076(tarjan)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1076
题意:中文题诶~
思路:先用tarjan找出所有桥,再用桥限制的情况下dfs一遍。。。
代码:
#include <bits/stdc++.h>
using namespace std; const int MAXN=1e5+;
vector<int> mp[MAXN];
bool is_cut[MAXN];
int n, m, ans=;
int vis[MAXN];
int low[MAXN], dfn[MAXN], pre[MAXN];//pre[u]记录u的父亲节点编号
//dfn[u]记录节点u在DFS过程中被遍历到的次序号,low[u]记录节点u或u的子树通过非父子边追溯到最早的祖先节点(即DFS次序号最小 void tarjan(int u, int fu){
pre[u]=fu;//记录当前u的父亲节点
dfn[u]=low[u]=++ans;
for(int i=; i<mp[u].size(); i++){
int v=mp[u][i];
if(!dfn[v]){
tarjan(v, u);
low[u]=min(low[u], low[v]);//先是得到一颗dfs树,回溯过程即後序遍历此dfs树,此时low[v]已經得到,因此可以通過low[v]來更新low[u]
}else if(fu!=v){//如果v是u的父亲的话,即有重边,那么不可能是桥
low[u]=min(low[u], dfn[v]);
}
}
} void dfs(int x, int cnt){
vis[x]=cnt;
for(int i=; i<mp[x].size(); i++){
int v=mp[x][i];
if(vis[v]||is_cut[v]&&is_cut[x]) continue;
dfs(v, cnt);
}
} void solve(void){
for(int i=; i<=n; i++){
if(!dfn[i]) tarjan(i, );
int v=pre[i];
if(dfn[v]<low[i]&&v>){
is_cut[i]=is_cut[v]=;
}
}
int cnt=;
for(int i=; i<=n; i++){
if(!vis[i]){
cnt++;
dfs(i, cnt);
}
}
} int main(void){
scanf("%d%d", &n, &m);
for(int i=; i<m; i++){
int x, y;
scanf("%d%d", &x, &y);
mp[x].push_back(y);
mp[y].push_back(x);
}
solve();
int q;
scanf("%d", &q);
while(q--){
int s, e;
scanf("%d%d", &s, &e);
if(vis[s]==vis[e]) puts("Yes");
else puts("No");
}
return ;
}
51nod1076(tarjan)的更多相关文章
- HDU4738 tarjan割边|割边、割点模板
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4738 坑点: 处理重边 图可能不连通,要输出0 若求出的结果是0,则要输出1,因为最少要派一个人 #inc ...
- bzoj 1179[Apio2009]Atm (tarjan+spfa)
题目 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...
- tarjan讲解(用codevs1332(tarjan的裸题)讲解)
主要借助这道比较裸的题来讲一下tarjan这种算法 tarjan是一种求解有向图强连通分量的线性时间的算法.(用dfs来实现) 如果两个顶点可以相互通达,则称两个顶点强连通.如果有向图G的每两个顶点都 ...
- NOIP2009最优贸易[spfa变形|tarjan 缩点 DP]
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
- Tarjan
//求强连通分量 void uni(int x,int y){ if (rank[x]<rank[y]){ fa[x]=y; size[y]+=size[x]; }else{ rank[x]+= ...
- 【UOJ#67】新年的毒瘤 Tarjan 割点
#67. 新年的毒瘤 UOJ直接黏贴会炸... 还是戳这里吧: http://uoj.ac/problem/67#tab-statement Solution 看到这题的标签就进来看了一眼. 想 ...
- 【Codefoces487E/UOJ#30】Tourists Tarjan 点双连通分量 + 树链剖分
E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard inpu ...
- 【BZOJ-1123】BLO Tarjan 点双连通分量
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 970 Solved: 408[Submit][Status][ ...
- 【BZOJ-2730】矿场搭建 Tarjan 双连通分量
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1602 Solved: 751[Submit][Statu ...
随机推荐
- Drawing Images and Text
using System;using UIKit;using Foundation;using CoreGraphics;namespace GraphicsAnimation{ public cla ...
- 【BZOJ1014】[JSOI2008]火星人prefix Splay+hash
[BZOJ1014][JSOI2008]火星人prefix Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个 ...
- python exception的传递
try: block except1: except2: ... 如果block中出现了except,那么会先取匹配except1,如果匹配了,进行处理,程序继续执行. 如果except1没有匹配上, ...
- 解决shell脚本“syntax error near unexpected token `fi'”的问题。
执行shell脚本的时候,提示如下错误: 查询资料后发现: 执行: vi finddir.sh 然后,输入 :set ff 结果是: 解决方案就是,修改为unix: :set ff=unix 执行保存 ...
- Latex强制图片位置
经常使用选项[htbp]是浮动格式: 『h』当前位置.将图形放置在正文文本中给出该图形环境的地方. 假设本页所剩的页面不够.这一參数将不起作用. 『t』顶部.将图形放置在页面的顶部. 『b』底部.将图 ...
- TypeSafe Config使用
================typesafeconfig的使用==================== #1.加入依赖包 config-1.2.1.jar #2.加载配置 ConfigFactor ...
- SOAP Only Authentication Using C#
Jason Lattimer's Blog Monday, February 9, 2015 SOAP Only Authentication ...
- Linux随笔-鸟哥Linux基础篇学习总结(全)
Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...
- Intellij IDEA 修改代码后自动编译更新
Intellij IDEA 一些不为人知的技巧 问题描述: Intellij IDEA 调试修改时,改动页面和 java 文件后,无法立刻看到变化,需要手动重启服务. 问题原因: 在 IDEA tom ...
- [usaco2009nov]奶牛的图片
Farmer John希望给他的N(1<=N<=100,000)只奶牛拍照片,这样他就可以向他的朋友炫耀他的奶牛.这N只奶牛被标号为1..N.在照相的那一天,奶牛们排成了一排.其中第i个位 ...