题意:

  就是求桥最多的一条路

解析:

  先求连通分量的个数 然后缩点建图  求直径即可

 

  1. #include <bits/stdc++.h>
  2. #define mem(a, b) memset(a, b, sizeof(a))
  3. using namespace std;
  4. const int maxn = 1e6+, INF = 0x7fffffff;
  5. vector<int> G[maxn<<];
  6. int pre[maxn<<], lowlink[maxn<<], sccno[maxn<<], dfs_clock, scc_cnt, d[maxn<<], vis[maxn<<];
  7. stack<int> S;
  8. int n, m, maxway, pos;
  9. map<int, int> w[maxn<<];
  10. int head[maxn<<], cnt, ans;
  11. struct node
  12. {
  13. int u, v, next;
  14. }Node[maxn<<];
  15.  
  16. void add_(int u, int v)
  17. {
  18. Node[cnt].u = u;
  19. Node[cnt].v = v;
  20. Node[cnt].next = head[u];
  21. head[u] = cnt++;
  22. }
  23.  
  24. void add(int u, int v)
  25. {
  26. add_(u, v);
  27. add_(v, u);
  28. }
  29.  
  30. void dfs(int u, int fa)
  31. {
  32. pre[u] = lowlink[u] = ++dfs_clock;
  33. S.push(u);
  34. for(int i=; i<G[u].size(); i++)
  35. {
  36. int v = G[u][i];
  37. if(v == fa) continue;
  38. if(!pre[v])
  39. {
  40. dfs(v, u);
  41. lowlink[u] = min(lowlink[u], lowlink[v]);
  42. }
  43. else if(!sccno[v])
  44. lowlink[u] = min(lowlink[u], pre[v]);
  45. }
  46. if(lowlink[u] == pre[u])
  47. {
  48. scc_cnt++;
  49. for(;;)
  50. {
  51. int x = S.top(); S.pop();
  52. sccno[x] = scc_cnt;
  53. if(x == u) break;
  54. }
  55. }
  56. }
  57.  
  58. void init()
  59. {
  60. dfs_clock = scc_cnt = cnt = ;
  61. mem(sccno, );
  62. mem(pre, );
  63. mem(head, -);
  64. }
  65.  
  66. void bfs(int u)
  67. {
  68. mem(vis, );
  69. mem(d, );
  70. queue<int> Q;
  71. Q.push(u);
  72. vis[u] = ;
  73. d[u] = ;
  74. maxway = , pos = u, ans = ;
  75. while(!Q.empty())
  76. {
  77. int u = Q.front(); Q.pop();
  78. for(int i=head[u]; i!=-; i=Node[i].next)
  79. {
  80. int v = Node[i].v;
  81. if(!vis[v])
  82. {
  83. vis[v] = ;
  84. d[v] = d[u] + ;
  85. if(d[v] > maxway)
  86. maxway = d[v], pos = v;
  87. Q.push(v);
  88. }
  89. }
  90. }
  91. }
  92.  
  93. int main()
  94. {
  95. init();
  96. cin>> n >> m;
  97. int u, v;
  98. for(int i=; i<m; i++)
  99. {
  100. cin>> u >> v;
  101. G[u].push_back(v);
  102. G[v].push_back(u);
  103. }
  104. dfs(, -);
  105. // cout<< scc_cnt <<endl;
  106. for(int i=; i<=n; i++)
  107. {
  108. for(int j=; j<G[i].size(); j++)
  109. {
  110. int v = G[i][j];
  111. if(sccno[i] != sccno[v])
  112. {
  113. // cout<< i << " " << v <<endl;
  114. // w[i][v] = w[v][i] = 1;
  115. if(!w[sccno[i]][sccno[v]])
  116. w[sccno[i]][sccno[v]] = w[sccno[i]][sccno[v]] = , add(sccno[i], sccno[v]);
  117. }
  118. }
  119. }
  120. bfs();
  121. bfs(pos);
  122. cout<< maxway <<endl;
  123.  
  124. return ;
  125. }

We Need More Bosses CodeForces - 1000E(缩点 建图 求桥 求直径)的更多相关文章

  1. E - We Need More Bosses CodeForces - 1000E (tarjan缩点,树的直径)

    E - We Need More Bosses CodeForces - 1000E Your friend is developing a computer game. He has already ...

  2. HDU 1045 Fire Net(行列匹配变形+缩点建图)

    题意:n*n的棋盘上放置房子.同一方同一列不能有两个,除非他们之间被墙隔开,这种话. 把原始图分别按行和列缩点 建图:横竖分区.先看每一列.同一列相连的空地同一时候看成一个点,显然这种区域不可以同一时 ...

  3. hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. poj3592 Instantaneous Transference tarjan缩点+建图

    //给一个n*m的地图.坦克从(0 , 0)開始走 //#表示墙不能走,*表示传送门能够传送到指定地方,能够选择也能够选择不传送 //数字表示该格的矿石数, //坦克从(0,0)開始走.仅仅能往右和往 ...

  5. HPU 3639--Hawk-and-Chicken【SCC缩点反向建图 &amp;&amp; 求传递的最大值】

    Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. We Need More Bosses CodeForces - 1000E (无向图缩点)

    大意: 给定无向连通图, 定义两个点$s,t$个价值为切断一条边可以使$s,t$不连通的边数. 求最大价值. 显然只有桥会产生贡献. 先对边双连通分量缩点建树, 然后求直径即为答案. #include ...

  7. ZOJ 3781 - Paint the Grid Reloaded - [DFS连通块缩点建图+BFS求深度][第11届浙江省赛F题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Time Limit: 2 Seconds      Me ...

  8. poj2186Popular Cows+tarjan缩点+建图

    传送门: 题意: 给出m条关系,表示n个牛中的崇拜关系,这些关系满足传递性.问被所有牛崇拜的牛有几头: 思路: 先利用tarjan缩点,同一个点中的牛肯定就是等价的了,建立新的图,找出其中出度为0的点 ...

  9. POJ 2226 缩点建图+二分图最大匹配

    这个最小覆盖但不同于 POJ 3041,只有横或者竖方向连通的点能用一块板子覆盖,非连续的,就要用多块 所以用类似并查集方法,分别横向与竖向缩点,有交集的地方就连通,再走一遍最大匹配即可 一开始还有点 ...

随机推荐

  1. 基于LBS平台的iOS开发

    LBS,即Location Based Services,基于位置服务,用于定位.导航等功能,比如地图应用.订外卖等的app就需要这个功能. 在这里我使用的是高德LBS开放平台,地址:http://l ...

  2. stop-hbase.sh一直处于等待状态

    今天关闭HBase时,输入stop-hbase.sh一直处于等待状态 解决方法: 先输入:hbase-daemon.sh stop master 再输入:stop-hbase.sh就可以关闭HBase ...

  3. HO引擎近况20190110

    前两天更新完,挺兴奋 趁着兴奋把虚拟机里面的MACOSX从10.12.6升级到了10.14 然后装XCODE,虽然比较熟悉了,但是架不住慢啊 先下载了一个DMG的镜像文件,用不了,转成ISO也不行 然 ...

  4. 20155234《网路对抗》Exp9 WEB安全基础

    20155234 Exp9 Web安全基础 基础问答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意 ...

  5. Web安全基础实践

    Web安全基础实践 标签(空格分隔): <> 目录 基础问题回答 WebGoat下载安装 SQL注入攻击 - SQL字符串注入(String SQL Injection) - 数字型SQL ...

  6. 【php增删改查实例】第四节 -自己 DIY 一个数据库管理工具

    本节介绍如何自己DIY一个数据库管理工具,可以在页面输入sql 进行简单的增删改查操作. 首先,找到xampp的安装目录,打开htdocs: 新建一个php文件,名称为 mysqladmin.php ...

  7. oracle移动数据/修改数据文件路径

    参考:http://wwyz998.blog.163.com/blog/static/321867852011117111832334/ oracle移动数据文件 1.连接到数据库 [oracle@l ...

  8. fastjson 使用记录

    参考: https://www.cnblogs.com/cdf-opensource-007/p/7106018.html import com.alibaba.fastjson.JSON; impo ...

  9. Java设计模式-建造者(Builder)模式

    目录 由来 使用 1. 定义抽象 Builder 2. 定义具体 Builder类 3. 定义具体 Director类 4. 测试 定义 文字定义 结构图 优点 举例 @ 最近在看Mybatis的源码 ...

  10. SpringBoot日记——MQ消息队列整合(一)

    除了之前讲到的缓存,我们还会用到消息队列来存储一些消息,为了提升系统的异步性能等等: 消息服务有两个概念需要知道:消息代理-message broker,目的地-destination.消息发送由代理 ...