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 ...
随机推荐
- Libra白皮书解读
文章目录 Libra简介 Libra区块链 Libra货币和存储 Libra协会 Libra简介 Libra是facebook发起的一个区块链项目,其使命是建立一套简单的.无国界的货币和为数十亿人服务 ...
- vscode快捷替换json格式
i=json from=AUTO to=AUTO smartresult=dict client=fanyideskweb salt=1537359261311 sign=06b7d1398ebdc6 ...
- inotify-tools的inotifywait工具用exclude 和 fromfile 排除指定后缀文件
今天打算使用 inotify-tool 来对线上程序文件进行监控, 因为有些目录是缓存目录, 所以要进行排除, 同时还要排除一些指定的后缀的文件, 比如 .swp 等 需要递归监控的目录为: /tmp ...
- 贪心--HDU 2021 发工资咯
Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵,但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就 ...
- 商汤提出解偶检测中分类和定位分支的新方法TSD,COCO 51.2mAP | CVPR 2020
目前很多研究表明目标检测中的分类分支和定位分支存在较大的偏差,论文从sibling head改造入手,跳出常规的优化方向,提出TSD方法解决混合任务带来的内在冲突,从主干的proposal中学习不同的 ...
- Linux常用的安全加固
一.账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤userdel <用户名> //删除不必要的账号.passwd -l <用户名> //锁定 ...
- andorid jar/库源码解析之错误提示
目录:andorid jar/库源码解析 错误: 错误1: Error: Static interface methods are only supported starting with Andro ...
- tomcat多个springboot项目启动失败
多个springboot项目打包成war包并放到tomcat下运行时出错了错误信息: Caused by: org.springframework.jmx.export.UnableToRegiste ...
- CentOS安装jsoncpp
两种安装方式: 通过cmake安装 通过scons安装 cmake安装见cmake安装jsoncpp,scons安装见下文. 1. 安装scons .tar.gz export MYSCONS=/ro ...
- springdata jpa基本注解
Springdata jpa的基本注解 1:@Entity @Entity注解用在实体类声明语句前,说明该Java类为实体类,将映射到指定的数据库表. 2:@Table @Table注解用在当实体类与 ...