元宵节+情人节晚上刷的题,纪念一下。。
题意:给出n个点,m条边,然后Q个询问,每次询问输入一条边,输出加入此边后桥的个数。。
 #include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
#include <stack>
const int N=;
using namespace std;
struct node
{
int u,v,w;
int next;
} edge[N*];
//dfn[i]表示点i的深度优先数;
int dfn[N],low[N],head[N]; //low[i]表示点i可到达的最低深度优先数
int vis[N],bridge[N],f[N];
int n,m,cnt,dfs_clock,Conn_cnt;
int ans ;
stack<int>S; void init()
{
ans = ;
cnt = ;
dfs_clock = ;
Conn_cnt = ;
for (int i = ; i <= n; i++)
f[i] = i;
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(vis,,sizeof(vis));
memset(head,-,sizeof(head));
}
void add(int u,int v)
{
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt++;
edge[cnt].v = u;
edge[cnt].next = head[v];
head[v] =cnt++;
} void dfs(int u)//Tarjan算法
{
vis[u] = ;
dfn[u]=low[u]=++dfs_clock;//设定初值
S.push(u);//将节点u压入栈中
for (int i = head[u]; i!=-; i=edge[i].next)//遍历u的临接点
{
int v = edge[i].v;
if (!vis[v])//如果改点的深度优先数为0(即没有搜索过)
{
f[v] = u;//记录父节点
dfs(v);//继续向下找
low[u] = min(low[u],low[v]);//回溯过程中计算low[]的值
if(low[v] > dfn[u])
{
ans++;
bridge[v] = ;//标记点u->v为桥
}
}
else if(vis[v]==&&v!=f[u])
{
low[u] = min(low[u],dfn[v]);
}
}
vis[u] = ;
}
void LCA(int u,int v)
{
if (dfn[u] < dfn[v])
swap(u,v);
while(dfn[u] > dfn[v])
{
if (bridge[u])
{
ans--;
bridge[u] = ;
}
u = f[u];
}
while(u!=v)
{
if (bridge[u])
{
ans--;
bridge[u] = ;
}
if (bridge[v])
{
ans--;
bridge[v] = ;
}
u = f[u];
v = f[v];
}
}
int main()
{
int u,v,o = ;
while(~scanf("%d%d",&n,&m))
{
if (n==&&m==)
break;
init();
o++;
for (int i = ; i < m; i++)
{
scanf("%d%d",&u,&v);
add(u,v);
}
dfs();
int t;
scanf("%d",&t);
printf("Case %d:\n",o);
while(t--)
{
scanf("%d%d",&u,&v);
LCA(u,v);
printf("%d\n",ans);
}
puts("");
}
return ;
}
 

最新文章

  1. 移动端Web适配的两种做法思路总结
  2. 【python】类(资料+疑惑)
  3. .net预览功能
  4. 多线程进行http请求
  5. AFNetworking 与 UIKit+AFNetworking 详解
  6. linux基本命令(1)-用户和组管理
  7. dataguard集群搭建
  8. springboot源码解析 - 构建SpringApplication
  9. python(四)数据持久化操作 文件存储
  10. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变
  11. SQL语句中output的用法
  12. IBM AIX Shell编写遭遇错误一2
  13. java.lang.SecurityException:Invalid signature file digest forManifest main attributes
  14. 使用STM32Cube在STM32F7开发板上实现SD+Freertos+Fatfs
  15. C# — Windows服务安装后自动停止问题
  16. 内核开启VF小结
  17. Jira 添加自定义字段
  18. Qt中运行后台线程不阻塞UI线程的方案
  19. 20165202 Mypwd
  20. Stream grouping-storm的流分组策略

热门文章

  1. 剑指offer---圆圈中最后剩下的数
  2. TestNG套件测试(二)
  3. Python运算符(Python学习笔记03)
  4. Python学习——字典
  5. Jet --theory
  6. CRC校验算法学习
  7. Spring MVC_Hello World
  8. [K/3Cloud]在插件中根据条件取消表单打开过程
  9. Choose and divide
  10. Spring + quartz实现定时发送邮件功能