题意:

  就是求桥最多的一条路

解析:

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

 

  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. 【转】软件质量之道:SourceMonitor

    转:https://blog.csdn.net/feng_ma_niu/article/details/40594799 SourceMonitor是一个源代码衡量工具,由http://www.cam ...

  2. 基于LBS平台的iOS开发

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

  3. ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理) - (转载)

    前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...

  4. 20155233 《网络对抗技术》EXP3 免杀原理与实践

    正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成jar包 输入命令msfvenom -p ...

  5. EZ 2018 02 26 NOIP2018 模拟赛(一)

    这次是校内OJ(HHHOJ)线上比赛,网址:http://211.140.156.254:2333/contest/51 (我去刚刚快写完了手贱关掉了) 这次总体难度也不高,T1&&T ...

  6. python中eval函数作用

    eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串 一.字符串转换成列表 a = "[[1,2], [3,4], [5 ...

  7. javascript source map 的使用

    之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大意 ...

  8. Inno Setup脚本

    某天夜晚一场狂风暴雨,由于办公室座位旁的窗户没关,笔记本电脑泡了一夜水,无法开机,无奈送修,里面的大量资料也不知道会不会丢失. is的脚本只有重新写了,重新研究了一下检测程序是否正在运行的判断方法,另 ...

  9. Json To CSharp

    This is a tools for generate json reader classes. In some case, when we get a json data, we hope to ...

  10. C++基础知识(1)

    C语言是结构化编程语言(for循环.while循环.do while循环和if else语句),将低级语言的效率.硬件访问能力和高级语言的通用性.可移植性融合在一起. UNIX编译和链接 UNIX用C ...