We Need More Bosses CodeForces - 1000E(缩点 建图 求桥 求直径)
题意:
就是求桥最多的一条路
解析:
先求连通分量的个数 然后缩点建图 求直径即可
- #include <bits/stdc++.h>
- #define mem(a, b) memset(a, b, sizeof(a))
- using namespace std;
- const int maxn = 1e6+, INF = 0x7fffffff;
- vector<int> G[maxn<<];
- int pre[maxn<<], lowlink[maxn<<], sccno[maxn<<], dfs_clock, scc_cnt, d[maxn<<], vis[maxn<<];
- stack<int> S;
- int n, m, maxway, pos;
- map<int, int> w[maxn<<];
- int head[maxn<<], cnt, ans;
- struct node
- {
- int u, v, next;
- }Node[maxn<<];
- void add_(int u, int v)
- {
- Node[cnt].u = u;
- Node[cnt].v = v;
- Node[cnt].next = head[u];
- head[u] = cnt++;
- }
- void add(int u, int v)
- {
- add_(u, v);
- add_(v, u);
- }
- void dfs(int u, int fa)
- {
- pre[u] = lowlink[u] = ++dfs_clock;
- S.push(u);
- for(int i=; i<G[u].size(); i++)
- {
- int v = G[u][i];
- if(v == fa) continue;
- if(!pre[v])
- {
- dfs(v, u);
- lowlink[u] = min(lowlink[u], lowlink[v]);
- }
- else if(!sccno[v])
- lowlink[u] = min(lowlink[u], pre[v]);
- }
- if(lowlink[u] == pre[u])
- {
- scc_cnt++;
- for(;;)
- {
- int x = S.top(); S.pop();
- sccno[x] = scc_cnt;
- if(x == u) break;
- }
- }
- }
- void init()
- {
- dfs_clock = scc_cnt = cnt = ;
- mem(sccno, );
- mem(pre, );
- mem(head, -);
- }
- void bfs(int u)
- {
- mem(vis, );
- mem(d, );
- queue<int> Q;
- Q.push(u);
- vis[u] = ;
- d[u] = ;
- maxway = , pos = u, ans = ;
- while(!Q.empty())
- {
- int u = Q.front(); Q.pop();
- for(int i=head[u]; i!=-; i=Node[i].next)
- {
- int v = Node[i].v;
- if(!vis[v])
- {
- vis[v] = ;
- d[v] = d[u] + ;
- if(d[v] > maxway)
- maxway = d[v], pos = v;
- Q.push(v);
- }
- }
- }
- }
- int main()
- {
- init();
- cin>> n >> m;
- int u, v;
- for(int i=; i<m; i++)
- {
- cin>> u >> v;
- G[u].push_back(v);
- G[v].push_back(u);
- }
- dfs(, -);
- // cout<< scc_cnt <<endl;
- for(int i=; i<=n; i++)
- {
- for(int j=; j<G[i].size(); j++)
- {
- int v = G[i][j];
- if(sccno[i] != sccno[v])
- {
- // cout<< i << " " << v <<endl;
- // w[i][v] = w[v][i] = 1;
- if(!w[sccno[i]][sccno[v]])
- w[sccno[i]][sccno[v]] = w[sccno[i]][sccno[v]] = , add(sccno[i], sccno[v]);
- }
- }
- }
- bfs();
- bfs(pos);
- cout<< maxway <<endl;
- return ;
- }
We Need More Bosses CodeForces - 1000E(缩点 建图 求桥 求直径)的更多相关文章
- 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 ...
- HDU 1045 Fire Net(行列匹配变形+缩点建图)
题意:n*n的棋盘上放置房子.同一方同一列不能有两个,除非他们之间被墙隔开,这种话. 把原始图分别按行和列缩点 建图:横竖分区.先看每一列.同一列相连的空地同一时候看成一个点,显然这种区域不可以同一时 ...
- hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- poj3592 Instantaneous Transference tarjan缩点+建图
//给一个n*m的地图.坦克从(0 , 0)開始走 //#表示墙不能走,*表示传送门能够传送到指定地方,能够选择也能够选择不传送 //数字表示该格的矿石数, //坦克从(0,0)開始走.仅仅能往右和往 ...
- HPU 3639--Hawk-and-Chicken【SCC缩点反向建图 && 求传递的最大值】
Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- We Need More Bosses CodeForces - 1000E (无向图缩点)
大意: 给定无向连通图, 定义两个点$s,t$个价值为切断一条边可以使$s,t$不连通的边数. 求最大价值. 显然只有桥会产生贡献. 先对边双连通分量缩点建树, 然后求直径即为答案. #include ...
- 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 ...
- poj2186Popular Cows+tarjan缩点+建图
传送门: 题意: 给出m条关系,表示n个牛中的崇拜关系,这些关系满足传递性.问被所有牛崇拜的牛有几头: 思路: 先利用tarjan缩点,同一个点中的牛肯定就是等价的了,建立新的图,找出其中出度为0的点 ...
- POJ 2226 缩点建图+二分图最大匹配
这个最小覆盖但不同于 POJ 3041,只有横或者竖方向连通的点能用一块板子覆盖,非连续的,就要用多块 所以用类似并查集方法,分别横向与竖向缩点,有交集的地方就连通,再走一遍最大匹配即可 一开始还有点 ...
随机推荐
- 【转】软件质量之道:SourceMonitor
转:https://blog.csdn.net/feng_ma_niu/article/details/40594799 SourceMonitor是一个源代码衡量工具,由http://www.cam ...
- 基于LBS平台的iOS开发
LBS,即Location Based Services,基于位置服务,用于定位.导航等功能,比如地图应用.订外卖等的app就需要这个功能. 在这里我使用的是高德LBS开放平台,地址:http://l ...
- ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理) - (转载)
前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...
- 20155233 《网络对抗技术》EXP3 免杀原理与实践
正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成jar包 输入命令msfvenom -p ...
- EZ 2018 02 26 NOIP2018 模拟赛(一)
这次是校内OJ(HHHOJ)线上比赛,网址:http://211.140.156.254:2333/contest/51 (我去刚刚快写完了手贱关掉了) 这次总体难度也不高,T1&&T ...
- python中eval函数作用
eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串 一.字符串转换成列表 a = "[[1,2], [3,4], [5 ...
- javascript source map 的使用
之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大意 ...
- Inno Setup脚本
某天夜晚一场狂风暴雨,由于办公室座位旁的窗户没关,笔记本电脑泡了一夜水,无法开机,无奈送修,里面的大量资料也不知道会不会丢失. is的脚本只有重新写了,重新研究了一下检测程序是否正在运行的判断方法,另 ...
- Json To CSharp
This is a tools for generate json reader classes. In some case, when we get a json data, we hope to ...
- C++基础知识(1)
C语言是结构化编程语言(for循环.while循环.do while循环和if else语句),将低级语言的效率.硬件访问能力和高级语言的通用性.可移植性融合在一起. UNIX编译和链接 UNIX用C ...