题意:给定一个 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)相关推荐

  1. POJ 3713 Transferring Sylla​ 题解 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3713 Transferring Sylla三连通图:判断一个无向图是否三连通?3.5借助水流解决问题的网络流最大流刷个题报 ...

  2. POJ,3713 Transferring Sylla

    题意:重新夺得Sylla之后,公司决定加强安保系统,就是建个运输网络,General要求这个网络必须满足每两个城市之间至少有三条独立的路线.(越看越像prison break)现在给你城市的坐标,让你 ...

  3. POJ 3713 枚举 + Tarjan 割点

    题意 传送门 POJ 3713 题解 白书里归到最大流最小割,Emmmm没有找到复杂度比较低的方法.虽然通道节点不相交可以转化为节点容量为 1,通过拆成 2 个节点并连边转化成最大流问题,但要枚举每一 ...

  4. poj3713 Transferring Sylla 枚举+tarjan判割点

    其实就是判断是否为三连通图 三连通图指的是去掉3个点就不连通的图,但是并没有直接求三连通的算法.著名的Tarjan算法可以求解连通和割点,再枚举删除一个点就能达到三连通的目的. 先看用例2,是由用例1 ...

  5. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  6. POJ 2096 Collecting Bugs:期望dp

    题目链接:http://poj.org/problem?id=2096 题意: 有一个程序猿,他每天都会发现一个bug. bug共有n个种类.属于某一个种类的概率为1/n. 有s个子系统,每个bug属 ...

  7. POJ 3268 D-Silver Cow Party

    http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  8. poj 2559 Largest Rectangle in a Histogram 栈

    // poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...

  9. POJ 2528 Mayor's posters(线段树)

    题目大意 贴海报.每张海报的高度都是一样的,唯独宽度不一样.每张海报只能占用整数倍的单位线段长度,贴了 n(n<=10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)? ...

最新文章

  1. 【CV】深度学习中Epoch, Batch, Iteration的含义
  2. win10每次开机都会自检系统盘(非硬件故障)——解决方案2019.07.12
  3. 深入理解Android中View
  4. 汇编语言第二课作业2.1
  5. Android 优秀博客汇总
  6. android 16进制 全透明_你有几种实现方案Android 设备唯一标识?
  7. 快速入门系列之 Rust 语言 GitChat连接
  8. Hbase 2.0 RegionObserver使用
  9. Mac终端神器zsh
  10. java线程异步传值_Java 多线程传值的四种方法
  11. c#后的完整cookie
  12. 关于元素水平垂直居中的那些事?
  13. 计算机如何设置多用户,windows7远程桌面多用户连接怎么设置_win7远程桌面如何设置多人登录-win7之家...
  14. sql未保存文档找回
  15. 一文读懂微软转型秘诀
  16. 在chrome中设置禁止访问的网站
  17. 使用ConnectBot开源项目在android设备上管理你的linux系统
  18. 地理计算 | EXCEL中快速计算列表的经纬度距离
  19. c++ 写入文件_常见数据库写入Webshell汇总
  20. UE5/C++ 基于GAS的角色升级 7.2 准备好经验奖励效果GE

热门文章

  1. 随机名字获取,杜绝取名烦恼
  2. Kinect_0:项目背景
  3. 线上拼团活动方案怎么制作设计?
  4. 商家转账到零钱快速开通方法
  5. UnityHub 无需登录 傻瓜教程 一键搞定
  6. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)
  7. 给windows右键,添加快捷键
  8. 微信小程序中时间戳和日期的相互转换
  9. 【转】微信小程序日期时间选择器(年月日时分秒)
  10. 算法之狄克斯特拉算法