第一道双联通的题目,求加几条边让原图成一个双联通图,求出度数为1的双联通分量的个数+1/2、

Low[u]为u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点的序号

#include<stdio.h>
#include<stack>
#include<string.h>
#define N 5010
using namespace std;
int n,m,first[N],num,low[N],dfs[N],idx,ans,vis[N],degree[N],belong[N];
struct edge
{
int ed,next;
}E[10010];
void addedge(int x,int y)
{
E[num].ed=y;
E[num].next=first[x];
first[x]=num++;
}
stack<int>Q;
void Tarjan(int u,int father)
{ low[u]=dfs[u]=idx++;
vis[u]=1;
Q.push(u);
for(int p=first[u];p!=-1;p=E[p].next)
{
int v=E[p].ed;
if(v==father){continue;}
if(!vis[v])Tarjan(v,u);
low[u]=low[u]>low[v]?low[v]:low[u];
}
int x;
if(low[u]==dfs[u])
{
do
{
x=Q.top();
Q.pop();
vis[x]=0;
belong[x]=ans;//缩点
}while(x!=u);
ans++;
}
}
int judge(int x,int y)
{
for(int p=first[x];p!=-1;p=E[p].next)
if(E[p].ed==y)
return 0;
return 1;
}
int main()
{
int i,x,y,sum;
while(scanf("%d%d",&n,&m)!=-1)
{
memset(first,-1,sizeof(first));
num=0;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
if(judge(x,y)==1)//去掉重边
{
addedge(x,y);
addedge(y,x);
}
}
memset(vis,0,sizeof(vis));
idx=ans=0;
Tarjan(1,0);
memset(degree,0,sizeof(degree));
for(i=1;i<=n;i++)
{
for(int p=first[i];p!=-1;p=E[p].next)
{
int v=E[p].ed;
if(belong[i]!=belong[v])
degree[belong[v]]++;
}
}
sum=0;
for(i=0;i<ans;i++)
if(degree[i]==1)//度为1的点
sum++;
//printf("%d\n",sum);
printf("%d\n",(sum+1)/2);
}
return 0;
}

poj 3177的更多相关文章

  1. POJ 3177 Redundant Paths(边双连通的构造)

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13717   Accepted: 5824 ...

  2. poj 3177 Redundant Paths

    题目链接:http://poj.org/problem?id=3177 边双连通问题,与点双连通还是有区别的!!! 题意是给你一个图(本来是连通的),问你需要加多少边,使任意两点间,都有两条边不重复的 ...

  3. tarjan算法求桥双连通分量 POJ 3177 Redundant Paths

    POJ 3177 Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12598   Accept ...

  4. POJ 3177 Redundant Paths POJ 3352 Road Construction

    这两题是一样的,代码完全一样. 就是给了一个连通图,问加多少条边可以变成边双连通. 去掉桥,其余的连通分支就是边双连通分支了.一个有桥的连通图要变成边双连通图的话,把双连通子图收缩为一个点,形成一颗树 ...

  5. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  6. POJ 3177——Redundant Paths——————【加边形成边双连通图】

    Redundant Paths Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  7. POJ - 3177 Redundant Paths(边双连通分支)(模板)

    1.给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图. 2. 3. //边双连通分支 /* 去掉桥,其余的连通分支就是边双连通分支了.一个有桥的连通图要变成边双连通图的话, 把双连通子图 ...

  8. POJ 3177 Redundant Paths(强连通分量)

    题目链接:http://poj.org/problem?id=3177 题目大意是一个无向图给你n个点m条边,让你求出最少加多少条边 可以让任意两个点相通两条及以上的路线(每条路线点可以重复,但是每条 ...

  9. (poj 3177) Redundant Paths

    题目链接 :http://poj.org/problem?id=3177 Description In order to <= F <= ,) grazing fields (which ...

  10. poj 3177 Redundant Paths(边双连通分量+缩点)

    链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ...

随机推荐

  1. iscroll-lite.js源码注释

    /*! iScroll v5.1.2 ~ (c) 2008-2014 Matteo Spinelli ~ http://cubiq.org/license */ (function (window, ...

  2. C++第二课(2013.9.27 )

    //引用的作用:代码简洁 //形参和实参同地址,实现的方式和指针的一样 //引用和指针没有本质的区别 //强转引用 float f = 3.14f; cout<< hex << ...

  3. python安装包问题小结

    你可能遇到的问题包括:ImportError: No module named sklearn 未安装sklearn包ImportError: DLL load failed: 找不到指定的模块Imp ...

  4. py2exe生成exe后,运行exe时提示No module named * 的解决办法

    一个pymssql 的程序在解释器上运行正常,但是用py2exe打包后,提示 ImportError: No module named _mssql 百度了半天无果,然后bing,结果bing还是比百 ...

  5. 硬盘安装ubuntu

    本文记录在能够启动到GRUB2启动菜单的前提下硬盘安装ubuntu的方法. 14.04和16.04测试可用. 假设镜像文件放在GPT第一个分区,文件名为ubuntu.iso. 启动到GRUB2菜单后, ...

  6. mongoexport导出数据

    mongoexport用法: /***** Export MongoDB data to CSV, TSV or JSON files.options:  --help                 ...

  7. UIViewController的生命周期及iOS程序执行顺序

    UIViewController的生命周期及iOS程序执行顺序     当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                         ...

  8. 计算textView的高度

    - (CGFloat)measureHeightOfUITextView:(UITextView *)textView { if (floor(NSFoundationVersionNumber) & ...

  9. 开心学习系列学习笔记-----nodejs缺点

    不支持故障恢复   不知你是否在调试的过程中注意,当程序有错误发生时,整个进程就会结束,需要重  新在终端中启动服务器.这一点在开发中无可厚非,但在产品环境下就是严重的问题  了,因为一旦用户访问时触 ...

  10. 在Fragment中使用BaiduMap SDK

    1:fragment_bshdzh.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...