http://poj.org/problem?id=3352

vis表示访问的次序 low的值相同的点在同一连通分量

 #include <algorithm>
#include <cstring>
#include <cstdio> using namespace std; const int N();
int n,m,u,v,ans;
int head[N],sumedge;
struct Edge
{
int to,next;
Edge(int to=,int next=) :
to(to),next(next) {}
}edge[N<<]; void ins(int from,int to)
{
edge[++sumedge]=Edge(to,head[from]);
head[from]=sumedge;
} int tim,dfn[N],low[N],vis[N],du[N];
int sumcol,col[N],colvis[N]; void DFS(int now,int pre)
{
low[now]=dfn[now]=++tim;
vis[now]=;
for(int i=head[now];i;i=edge[i].next)
{
int go=edge[i].to;
if(go==pre) continue;
if(!vis[go])
{
DFS(go,now);
low[now]=min(low[now],low[go]);
} else if(vis[go]==)
low[now]=min(low[now],dfn[go]);
}
vis[now]=;
} int main()
{
scanf("%d%d",&n,&m);
for(;m;m--)
{
scanf("%d%d",&u,&v);
ins(u,v); ins(v,u);
}
for(int i=;i<=n;i++)
if(!vis[i]) DFS(i,i);
for(u=;u<=n;u++)
for(int j=head[u];j;j=edge[j].next)
{
v=edge[j].to;
if(low[u]!=low[v])
du[low[u]]++;
}
for(int i=;i<=n;i++)
if(du[i]==) ans++;
printf("%d\n",(ans+)>>);
return ;
}

最新文章

  1. ubuntu 14.04LTS 环境下配置NFS服务
  2. nginx 各类网站设置 (laravel , thinkphp , nodejs , https)
  3. lua中的string类型
  4. ip相关
  5. 在线生成CSS样式和兼容的字体格式
  6. 使用stringstream时的清空操作
  7. 【转】GCC使用简介
  8. scp输入密码问题
  9. bzoj1475
  10. 你能在windows上创建一个叫做AUX的文件夹吗?
  11. Android Native/Tombstone Crash Log 详细分析(转)
  12. windows10快捷键
  13. Delphi事件的广播 good
  14. HDU 5025 Saving Tang Monk
  15. 【python练习题】程序1
  16. Leetcode 326.3的幂 By Python
  17. 使用redux简单的实现加法运算(简单的状态改变)
  18. Android TextView 支持的HTML标签
  19. IP欺骗:要虚拟很多IP的情况:在一台机上虚拟的IP跨网段的处理,可通过在服务器端添加路由来实现
  20. 总结一发linux常用命令

热门文章

  1. Linux版本分支图
  2. 封装HttpClient进行http请求与https请求
  3. 高级函数-case
  4. java内存管理之内存模型
  5. Eclipse下的java工程目录问题和路径问题理解
  6. 开心的小明(南阳oj49)(01背包)
  7. 用了一天的时间,linux下expect实现ssh自己主动登录server记,歧视下网上各种抄来抄去残段子
  8. Android开发之AudioManager(音频管理器)具体解释
  9. java大数类,两个不超过20位都不为0的十进制字符串相乘,华为笔试题
  10. C# 应用异常捕获