HDU 4612 (13年多校第二场1002)无向图缩点,有重边
这道题是多校的题,比赛的时候是一道纷纷水过的板刷题。
题意:给你一些无向边,只加一条边,使该图的桥最少,然后输出最少的桥。
思路:当时大致想到思路了,就是缩点之后找出最长的链,然后用总的桥数减去链上的桥数。
也是这么写的,但是卡在了重边上。。
还是接触的题目太少了。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#include <iomanip>
#define PI acos(-1.0)
#define Max 2505
#define inf 1<<28
#define LL(x) ( x << 1 )
#define RR(x) ( x << 1 | 1 )
#define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define PII pair<int,int>
using namespace std;
#define M 2000005
#define N 200005
#pragma comment(linker,"/STACK:102400000,102400000") inline void RD(int &ret) {
char c;
do {
c = getchar();
} while(c < '0' || c > '9') ;
ret = c - '0';
while((c=getchar()) >= '0' && c <= '9')
ret = ret * 10 + ( c - '0' );
}
struct edge{
int e , next , sign ;
}ed[M] ,reed[M] ;
int n , m ;
int head[N] ,num ,rehead[N] ,renum ;
int dfn[N] , low[N] ,st[N] ,inst[N] , belong[N] ;
int dp ,top ,cnt ;
int dis[N] ;
bool vis[N] ;
int bridgenum ;
void add(int s ,int e){
ed[num].e = e ;
ed[num].sign = 0 ;
ed[num].next = head[s] ;
head[s] = num ++ ;
}
void readd(int s ,int e){
reed[renum].e = e ;
reed[renum].sign = 0 ;
reed[renum].next = rehead[s] ;
rehead[s] = renum ++ ;
}
void init(){
mem(dfn, 0) ;
mem(low , 0) ;
mem(st ,0) ;
mem(belong ,0) ;
mem(head, -1) ;
num = 0 ;
dp = 0 ;
top = 0 ;
cnt = 0 ;
mem(rehead,-1) ;
renum = 0 ;
bridgenum = 0 ;
} void tarjan(int now ,int fa){
dfn[now] = low[now] = ++ dp ;
st[top ++ ] = now ;
inst[now] = 1 ; for (int i = head[now] ; ~i ; i = ed[i].next ){
if(ed[i].sign)continue ;
ed[i].sign = ed[i ^ 1].sign = 1 ;
int e = ed[i].e ;
if(!dfn[e]){
tarjan(e , now) ;
low[now] = min(low[now] ,low[e]) ;
if(dfn[now] < low[e]){
bridgenum ++ ;
}
}
else if(inst[e]){
low[now] = min(low[now] , dfn[e]) ;
}
}
if(low[now] == dfn[now]){
int xx ;
cnt ++ ;
do{
xx = st[-- top] ;
inst[xx] = 0 ;
belong[xx] = cnt ;
}while(xx != now) ;
}
} void build(){
for (int i = 1 ; i <= n ; i ++ ){
dp = 0 ,top = 0 ;
if(!dfn[i]){
tarjan(i ,-1) ;
}
}
for (int i = 1 ; i <= n ; i ++ ){
for (int j = head[i] ; ~j ; j = ed[j].next ){
int e = ed[j].e ;
if(belong[i] == belong[e])continue ;
readd(belong[i] , belong[e]) ;
readd(belong[e] ,belong[i]) ;
}
}
}
queue<int>qe ;
int pos ;
int bfs(int s){
while(!qe.empty())qe.pop() ;
dis[s] = 0 ;
mem(vis , 0) ;
vis[s] = 1 ;
qe.push(s) ;
int ans = 0 ;
while(!qe.empty()){
int temp = qe.front() ;
qe.pop() ;
for (int i = rehead[temp] ; ~i ; i = reed[i].next){
int e = reed[i].e ;
if(!vis[e]){
dis[e] = dis[temp] + 1 ;
vis[e] = 1 ;
qe.push(e) ;
if(ans < dis[e]){
ans = dis[e] ;
pos = e ;
}
}
}
}
return ans ;
}
int main() {
while(scanf("%d%d",&n,&m) , (n + m)){
init() ;
while(m -- ){
int a , b ;
RD(a) ;RD(b) ;
add(a , b) ;
add(b , a) ;
}
build() ;
bfs(1) ;
int now = bfs(pos) ;
printf("%d\n",bridgenum - now) ;
}
return 0 ;
}
HDU 4612 (13年多校第二场1002)无向图缩点,有重边的更多相关文章
- HDU 4614 (13年多校第二场1004)裸线段树
题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. 然后有2个操作. 操作1,a b c ,往在a位置后面(包括a)插b朵花,输出插入的首位置和末位置. 操作 ...
- hdu 5308 (2015多校第二场第9题)脑洞模拟题,无语
题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=44 题意:给你n个n,如果能在n-1次运算之后(加减乘除)结果为24的输出n-1次运算的过程,如果不能输 ...
- hdu 5301 Buildings (2015多校第二场第2题) 简单模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子 ...
- 【HDU 5305】Friends 多校第二场(双向DFS)
依据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了.我们能够分两次搜索时间复杂度降低为 2 * 2 ^ 16 唯一须要注意的就是对眼下状态的哈希处理. 我採用的是 十进制表示法 跑的还是 ...
- hdu 6053: TrickGCD (2017 多校第二场 1009) 【莫比乌斯 容斥原理】
题目链接 定义f[n]表示n是最大公约数情况下的计数,F[n]为n是公约数情况下的计数 (可以和 http://www.cnblogs.com/Just--Do--It/p/7197788.html ...
- 2019年杭电多校第二场 1002题Beauty Of Unimodal Sequence(LIS+单调栈)
题目链接 传送门 思路 首先我们对\(a\)正反各跑一边\(LIS\),记录每个位置在前一半的\(LIS\)中应该放的位置\(ans1[i]\),后一半的位置\(ans2[i]\). 对于字典序最小的 ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- 2014多校第二场1011 || HDU 4882 ZCC Loves Codefires (贪心)
题目链接 题意 : 给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道问题需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最 ...
- hdu 5305 Friends(2015多校第二场第6题)记忆化搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5305 题意:给你n个人,m条关系,关系可以是online也可以是offline,让你求在保证所有人on ...
随机推荐
- 三级联动数据表db_nove.sql
-- phpMyAdmin SQL Dump -- version 2.11.2 -- http://www.phpmyadmin.net -- -- 主机: localhost -- 生成日期: 2 ...
- 详解PHP的__set()、__get()、__isset()、unset()四个方法
PHP系统中给我们提供了很多预定义的方法,这些方法大部分都需要在类中声明,只有需要时才添加到类中.它们的作用.方法名称.使用的参数列表和返回值都是在PHP中预定好的,并且都是以两个下划线开始的方法名称 ...
- flask开发restful api系列(3)--利用alembic进行数据库更改
上面两章,主要讲基本的配置,今天我们来做一个比较有趣的东西,为每个客户加一个头像图片.如果我们图片保存在自己的服务器,对于服务器要求有点高,每次下载的时候,都会阻塞网络接口,要是1000个人同时访问这 ...
- Android surfaceview详解
周末看<精通Android游戏开发>(Pro Android Games),里面讲到游戏的框架,其中一个重要的概念surfaceview,觉得不是很理解,于是花了一点时间研究了下,写下自己 ...
- 哪些产品不用开发原生APP,微信公众号就够了?
最近一阶段H5技术被推到高峰,很多人认为借助H5就能利用微信公众号取代APP原生应用了,而事实是怎么样的?这里我从产品层做一个客观分析. 一,原生APP总体趋势 要谈APP是否会被微信取代,那么必须回 ...
- SQLServer 安装以前的某个程序安装已在安装计算机上创建挂起的文件操作 解决办法
http://wenku.baidu.com/view/6732fe09844769eae009ede2.html SQL Server 安装以前的某个程序安装已在安装计算机上创建挂起的文件操作 安装 ...
- cf445A DZY Loves Chessboard
A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...
- hdu1796:容斥入门题
简单的容斥入门题.. 容斥基本的公式早就知道了,但是一直不会写. 下午看到艾神在群里说的“会枚举二进制数就会容斥”,后来发现还真是这样.. 然后直接贴代码了 #include <iostream ...
- [置顶] Oracle 11g R2 ASM:了解 Oracle ASM 基本概念
About Oracle ASM Instances About Oracle ASM Disk Groups About Mirroring and Failure Groups About Ora ...
- animation之translate、scale、alpha、rotate动画效果呈现
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...