狂晕,是我做题太少了吧?我竟然直接按输入输出的模式做题,即输出“Output for Sample Input 1”,呜呜,WA了几次就是因为这个。。。。。。。。。。。。。。。。。。。。。。。。。。。

View Code

 1 #include <iostream>
 2 #include <vector>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 const int maxN = 1000+10;
 8 int low[maxN];
 9 int DFN[maxN];
10 int cnt;
11 int Branch;
12 int degree[maxN];
13
14 vector<int> edge[maxN];
15
16 void Tarjan(int x,int fa)
17 {
18     low[x] = DFN[x] = cnt ++;
19
20     int len = edge[x].size();
21     for(int i = 0;i < len;i ++)
22     {
23         int u = edge[x][i];
24         if(u == fa) continue;
25         if(!DFN[u])
26         {
27             Tarjan(u,x);
28             low[x] = min(low[x],low[u]);
29         }
30         else if(low[x] > DFN[u])
31             low[x] = DFN[u];
32     }
33 }
34
35 void UseTarjan(int n)
36 {
37     memset(DFN,0,sizeof(DFN));
38     cnt = 1;
39
40     Branch = 0;
41     for(int i = 1;i <= n;i ++)
42     {
43         if(!DFN[i])
44         {
45             Tarjan(i,i);
46             Branch ++;
47         }
48     }
49 }
50
51 int main()
52 {
53     int n,m;
54
55     while(cin >> n >> m)
56     {
57         for(int i = 0;i <= n;i ++) edge[i].clear();
58
59         for(int i = 0;i < m;i ++)
60         {
61             int u,v;
62             cin >> u >> v;
63             edge[u].push_back(v);
64             edge[v].push_back(u);
65         }
66
67         UseTarjan(n);
68
69         memset(degree,0,sizeof(degree));
70         for(int i = 1;i <= n;i ++)
71         {
72             int len = edge[i].size();
73             for(int j = 0;j < len;j ++)
74             {
75                 if(low[i] != low[edge[i][j]])
76                     degree[low[i]] ++;
77             }
78         }
79
80         int ans = 0;
81         for(int i = 1;i < cnt;i ++)
82         {
83             if(degree[i] == 1) ans ++;
84         }
85         ans = (ans + 1) / 2;
86         cout << ans << endl;
87     }
88
89     return 0;
90 }

转载于:https://www.cnblogs.com/Shirlies/archive/2012/09/14/2685517.html

poj 3352【Road Construction】相关推荐

  1. POJ 1904 【强连通分量】.cpp

    题意: 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明 ...

  2. POJ 3422 【最大费用】.cpp

    题意: 给出一个每一格带值的矩阵 每一次只可以从左上角走到右下角 问走过k次后最多能得到多少值 P.S 走过的格子值会变成0 输入: 给出一个n 和 k 给出n*n 矩阵 思路: 因为求的是最大值 所 ...

  3. Invitation Cards POJ - 1511【最短路】

    Invitation Cards POJ - 1511 题目 思路:建两张图,一张正向一张反向,先在正向图里求一遍一号点到所有点的距离,再在反向图里求一遍,反向图里一号点到所有点的距离的意思是所有点到 ...

  4. POJ 2248【加法链】

    描述 对于一个数列a1,a2......am,其中a1 = 1,am = n , a1 < a2 < ... < am-1 < am 对于每个k(2<=k<=m), ...

  5. POJ 1659【Havel-Hakimi 定理】

    Havel-Hakimi 定理: 一个非负整数组成的有限序列如果是某个无向图的序列,则称该序列是可图的. 例如,判断序列s: 7, 7, 4, 3, 3, 3, 2, 1 是否是可图的. 删除序列s ...

  6. 【POJ - 3352】Road Construction(Tarjan,边双连通分量)

    题干: It's almost summer time, and that means that it's almost summer construction time! This year, th ...

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

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

  8. poj 3352 Road Construction(边-双连通分量)

    题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图. 解题思路: 显然,当图G存在桥(割边)的时候,它必定不是双连通的.桥的两个端点必定分别属于图G的两个[边双连通分量](注意不是点 ...

  9. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)

    http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...

最新文章

  1. 控制显示隐藏_大众发动机控制单元隐藏功能刷写
  2. 天正立面lisp什么意思_合欢花的花语是什么?为什么合欢花叫苦花?
  3. Caffe 关于 LetNet-5 之 lenet_train_test.prototxt 解析
  4. CMAKE支持c99的两种方式
  5. DARPA 计划向下一代人工智能技术投入 20 亿美元
  6. ArcGIS问题小记
  7. 我们该不该旗帜鲜明地反对李彦宏当选院士?
  8. Windows App开发之集合控件与数据绑定
  9. LeveyPopListView
  10. 全球及中国纳米材料行业竞争格局及发展规模预测报告2021年版
  11. python嵩天课后题及答案第二章_课后参考答案-第二章部分习题参考答案
  12. php %3ch1%3e字体,phpWebSite搜索模块跨站脚本执行漏洞
  13. 程序员面试被问到“三次握手,四次挥手”怎么办?
  14. nginx 优化(收藏)
  15. 全国计算机二级考试2008版教材,全国计算机等级考试教程:二级Visual FoxPro(2008年版)...
  16. 基于粒子滤波的定位算法 ——原理、理解与仿真
  17. LeetCode——四数之和
  18. 用xshell ssh连接测试服务器时候出的问题
  19. C Primer Plus(6) 中文版 第5章 运算符、表达式和语句 5.2 基本运算符
  20. Thinkpad T480 新机分区

热门文章

  1. imag--复数的虚数部分
  2. 图像添加Beta分布噪声
  3. MATLAB中各种对话框的设置
  4. linux db2乱码,DB2乱码(开始和结束,字符串中间没有好的办法)
  5. Fibonacci Again
  6. 优酷路由宝刷梅林_优酷路由宝刷breed(不死)教程
  7. 阿里云linux centos 一键部署web环境--图文详解
  8. redis--Sentinel
  9. 2017阿里云代码管理服务公测上线
  10. FreePascal - 如何在各个平台中安装CodeTyphon!