poj3177 无向连通图加多少条边变成边双连通图
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 15752 | Accepted: 6609 |
Description
Given a description of the current set of R (F-1 <= R <= 10,000) paths that each connect exactly two different fields, determine the minimum number of new paths (each of which connects exactly two fields) that must be built so that there are at least two separate routes between any pair of fields. Routes are considered separate if they use none of the same paths, even if they visit the same intermediate field along the way.
There might already be more than one paths between the same pair of fields, and you may also build a new path that connects the same fields as some other path.
Input
Lines 2..R+1: Each line contains two space-separated integers which are the fields at the endpoints of some path.
Output
Sample Input
7 7
1 2
2 3
3 4
2 5
4 5
5 6
5 7
Sample Output
2
注意重边
不能通过low值判断两个点在一个连通分量内,
因为这样的数据 1-6都在一个联通块内,但6的low值和其他不同。
6 7
1 2
2 3
3 4
4 6
6 2
4 5
5 1
但是貌似 没有影响?。因为虽然6的low值有变化,但是他不可能是叶节点,所以用low值水过去也是可以的吧 就是缩点后找叶子结点的数目+1/2就是答案
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
bool mp[N][N];
int head[N],dfn[N],low[N],cont[N];
int tot,cnt;
struct node{
int next,to;
}e[N<<];
void add(int u,int v){
e[tot].to=v;e[tot].next=head[u];head[u]=tot++;
e[tot].to=u;e[tot].next=head[v];head[v]=tot++;
}
void Tajan(int u,int fa){
dfn[u]=low[u]=++cnt;
for(int i=head[u];i+;i=e[i].next){
int v=e[i].to;
if(v==fa) continue;
if(!dfn[v]) {
Tajan(v,u);
low[u]=min(low[v],low[u]);
}
else low[u]=min(low[u],dfn[v]);
}
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
int u,v;
memset(head,-,sizeof(head));
memset(mp,,sizeof(mp));
memset(cont,,sizeof(cont));
tot=cnt=;
while(m--){
scanf("%d%d",&u,&v);
if(mp[u][v]) continue;
add(u,v);
mp[u][v]=mp[v][u]=;
}
Tajan(,);
for(int i=;i<=n;++i)
for(int j=head[i];j+;j=e[j].next){
int v=e[j].to;
if(low[v]!=low[i])
++cont[low[i]];
}
int ans=;
for(int i=;i<=n;++i)
if(cont[i]==) ++ans;
printf("%d\n",(ans+)/);
}
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
bool mp[N][N];
int head[N],dfn[N],low[N],cont[N],bl[N],q[N];
int tot,cnt,scnt,l;
struct node{
int next,to;
}e[N<<];
void add(int u,int v){
e[tot].to=v;e[tot].next=head[u];head[u]=tot++;
e[tot].to=u;e[tot].next=head[v];head[v]=tot++;
}
void Tajan(int u,int fa){
q[l++]=u;
dfn[u]=low[u]=++cnt;
for(int i=head[u];i+;i=e[i].next){
int v=e[i].to;
if(v==fa) continue;
if(!dfn[v]) {
Tajan(v,u);
low[u]=min(low[v],low[u]);
}
else low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
int t;
++scnt;
do{
t=q[--l];
bl[t]=scnt;
}while(t!=u);
}
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
int u,v;
memset(head,-,sizeof(head));
memset(mp,,sizeof(mp));
memset(cont,,sizeof(cont));
l=scnt=tot=cnt=;
while(m--){
scanf("%d%d",&u,&v);
if(mp[u][v]) continue;
add(u,v);
mp[u][v]=mp[v][u]=;
}
Tajan(,);
for(int i=;i<=n;++i)
for(int j=head[i];j+;j=e[j].next){
int v=e[j].to;
if(bl[v]!=bl[i])
++cont[bl[i]];
}
int ans=;
for(int i=;i<=n;++i)
if(cont[i]==) ++ans;
printf("%d\n",(ans+)/);
}
}
poj3177 无向连通图加多少条边变成边双连通图的更多相关文章
- poj 3352 Road Construction【边双连通求最少加多少条边使图双连通&&缩点】
Road Construction Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10141 Accepted: 503 ...
- ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug
ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug 近日发现eWebEditor V2.8 asp 版本上传文件文件名不能包含中文双引号,发现eWebEditor使用ASP“无惧上 ...
- 采用formdata做跨域的、无刷新、带进度条的文件上传
以前做无刷新上传,都要用iframe,如果想有进度条,就千难万难,不得不用flash等插件来实现. 现在HTML5终于普及了,筒子们不用再那么痛苦了. 所有这一切都变得异常简单!! 不信?且看如下代码 ...
- spin.js无图片实现loading进度条,支持但非依赖jquery
特点: 1.无图片,无外部CSS 2.无依赖(支持jQuery,但非必须) 3.高度可配置 4.分辨率无关 5.旧版本IE不支持时,采用VML支持 6.使用关键帧动画,采用setTimeout() 7 ...
- nyoj42——连通图加欧拉(连通图板子)dfs
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...
- Hive 组内计无重复数,追加每条记录后面
今天无意中碰到一个很简单的计算逻辑,但是用hive想了一大会才实现. 示例表数据: 需求逻辑: 给每条记录追加一个字段,用于统计按照p1和p2字段分组后,每个组中的num的数目(去重后的count). ...
- 无图无定位新版css步骤条兼容ie6+
<ul class="ui-step list-unstyled"> <li class="step-item"><b class ...
- POJ3177,/3352.求最少添加多少边使无向图边双连通
俩个题一样.tarjan算法应用,开始求桥,WA,同一个边双连通分量中low值未必都相同,不能用此来缩点.后来用并查集来判断,若不是桥,则在一个双连通分量中,并之,后边再查,将同一个双连通分量中的点通 ...
- poj 3177 Redundant Paths【求最少添加多少条边可以使图变成双连通图】【缩点后求入度为1的点个数】
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11047 Accepted: 4725 ...
随机推荐
- JDK11的重要新特性
文章目录 JDK11发布啦 Oracle不再提供JRE和Server JRE下载 删除部署工具 JavaFX不再包含在JDK中 删除Java EE和CORBA模块 JDK11发布啦 JDK11 在20 ...
- linux系统的简单配置
配置网卡:vim /etc/sysconfig/network-scripts/网卡名称 ifcfg-xxxx ##文件名称 DEVICE=xxx ##设备名称 BOOTPROTO=dhcp|st ...
- Android MVP 十分钟入门!
前言 在日常开发APP 的过程中,随着业务的扩展,规模的变化.我们的代码规模也会逐渐变得庞大,每一个类里的代码也会逐渐增多.尤其是Activity和Fragment ,由于Context 的存在,基本 ...
- 前线观察 | AWS re:Invent 2018见闻实录
作为云计算行业科技盛会,AWS:reInvent大会近年来越来越受关注,其中尤其被关注的分别是CEO Andy Jassy和CTO Werner Vogels的Keynote演讲.2018年11月28 ...
- Apache Storm 官方文档 —— Storm 与 Kestrel
本文说明了如何使用 Storm 从 Kestrel 集群中消费数据. 前言 Storm 本教程中使用了 storm-kestrel 项目和 storm-starter 项目中的例子.建议读者将这几个项 ...
- Nakamori Akina
听过中森明菜的歌以后,一直想写点什么.恰好前段时间看过她的一个访谈https://b23.tv/av13810011,节目里已经39岁左右的她看着已经有些衰老,但是那份属于她的天真却保持的很好. 节目 ...
- 数学--数论-- HDU -- 2854 Central Meridian Number (暴力打表)
A Central Meridian (ACM) Number N is a positive integer satisfies that given two positive integers A ...
- 迁移WPF项目到.NET CORE
综述 .NET CORE 3.0开始,桌面端支持WPF了.很多.NET FRAMEWORK的项目已经跑了一阵子了,不是很有必要支持.NET CORE,不过最近用一个程序,为了贯彻一些C# 8的特性,需 ...
- centos8-django项目部署 nginx+uwsgi
1.虚拟环境virtualenv安装 1.安装virtualenv pip3 install virtualenv 2.创建目录,把项目文件传过来 mkdir My cd My 3.创建独立运行环境- ...
- D - Silver Cow Party J - Invitation Cards 最短路
http://poj.org/problem?id=3268 题目思路: 直接进行暴力,就是先求出举行party的地方到每一个地方的最短路,然后再求以每一个点为源点跑的最短路. 还有一种方法会快很多, ...