POJ - 3713 (Transferring Sylla)
题意:给定一个 n 个顶点 和 m 条边的无向图(可能不连通),问是否满足每两个点之间都有至少三条不同的路径;
分析:枚举所有的点,删去当前点并判断剩下的图存不存在割点,若存在则表明剩下的图存在两个点只能通过割点这一条路径,就算加上删去的点也至多有两条不同的路径,
然后反过来,如果图中存在两个点之间不满足三条及以上不同的路径,即最多只有两条不同的路径,那么因为是枚举所有的点,则一定会枚举到这两个点之间路径上的点,删去之后,两点之间路径就只剩下至多一条,此时必然存在割点(或者两点已经不连通);
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N = 500+10;struct node{int to,nxt;
}e[20000*2+10];
int head[N],tot;void add(int u,int v){e[tot].to=v;e[tot].nxt=head[u];head[u]=tot++;
}int dfn[N],low[N],count,del,flag;void dfs(int u,int pre){if(flag) return;int son=0,kkk=1;dfn[u]=low[u]=++count;for(int i=head[u];i!=-1;i=e[i].nxt){int v=e[i].to;if(v==pre||v==del) continue;if(!dfn[v]){son++;dfs(v,u);low[u]=min(low[u],low[v]);if(pre!=-1&&low[v]>=dfn[u]){flag=1;return;}}else{low[u]=min(low[u],dfn[v]);}}if(pre==-1&&son>=2) flag=1;
}int main()
{int n,m;while(~scanf("%d%d",&n,&m)&&n+m){tot=0;memset(head,-1,sizeof(head));for(int i=0,u,v;i<m;i++){scanf("%d%d",&u,&v);add(u,v),add(v,u);}flag=0;for(int i=0;i<n;i++){del=i;count=0;memset(dfn,0,sizeof(dfn));dfn[i]=1;dfs((i+1)%n,-1);//因为删点前后图可能不连通,所以可以通过dfn是否被赋值来判断图连不连通for(int i=0;i<n;i++){ if(!dfn[i]){flag=1;break;}}if(flag) break;}if(flag) puts("NO");else puts("YES");}
}
POJ - 3713 (Transferring Sylla)相关推荐
- POJ 3713 Transferring Sylla 题解 《挑战程序设计竞赛》
为什么80%的码农都做不了架构师?>>> POJ 3713 Transferring Sylla三连通图:判断一个无向图是否三连通?3.5借助水流解决问题的网络流最大流刷个题报 ...
- POJ,3713 Transferring Sylla
题意:重新夺得Sylla之后,公司决定加强安保系统,就是建个运输网络,General要求这个网络必须满足每两个城市之间至少有三条独立的路线.(越看越像prison break)现在给你城市的坐标,让你 ...
- POJ 3713 枚举 + Tarjan 割点
题意 传送门 POJ 3713 题解 白书里归到最大流最小割,Emmmm没有找到复杂度比较低的方法.虽然通道节点不相交可以转化为节点容量为 1,通过拆成 2 个节点并连边转化成最大流问题,但要枚举每一 ...
- poj3713 Transferring Sylla 枚举+tarjan判割点
其实就是判断是否为三连通图 三连通图指的是去掉3个点就不连通的图,但是并没有直接求三连通的算法.著名的Tarjan算法可以求解连通和割点,再枚举删除一个点就能达到三连通的目的. 先看用例2,是由用例1 ...
- 《挑战程序设计竞赛(第2版)》习题册攻略
本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...
- POJ 2096 Collecting Bugs:期望dp
题目链接:http://poj.org/problem?id=2096 题意: 有一个程序猿,他每天都会发现一个bug. bug共有n个种类.属于某一个种类的概率为1/n. 有s个子系统,每个bug属 ...
- POJ 3268 D-Silver Cow Party
http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...
- POJ 2528 Mayor's posters(线段树)
题目大意 贴海报.每张海报的高度都是一样的,唯独宽度不一样.每张海报只能占用整数倍的单位线段长度,贴了 n(n<=10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)? ...
最新文章
- 【CV】深度学习中Epoch, Batch, Iteration的含义
- win10每次开机都会自检系统盘(非硬件故障)——解决方案2019.07.12
- 深入理解Android中View
- 汇编语言第二课作业2.1
- Android 优秀博客汇总
- android 16进制 全透明_你有几种实现方案Android 设备唯一标识?
- 快速入门系列之 Rust 语言 GitChat连接
- Hbase 2.0 RegionObserver使用
- Mac终端神器zsh
- java线程异步传值_Java 多线程传值的四种方法
- c#后的完整cookie
- 关于元素水平垂直居中的那些事?
- 计算机如何设置多用户,windows7远程桌面多用户连接怎么设置_win7远程桌面如何设置多人登录-win7之家...
- sql未保存文档找回
- 一文读懂微软转型秘诀
- 在chrome中设置禁止访问的网站
- 使用ConnectBot开源项目在android设备上管理你的linux系统
- 地理计算 | EXCEL中快速计算列表的经纬度距离
- c++ 写入文件_常见数据库写入Webshell汇总
- UE5/C++ 基于GAS的角色升级 7.2 准备好经验奖励效果GE