仙人掌图(有向):同时满足:1强连通;2任何边不在俩个环中。

个人理解:其实就是环之间相连,两两只有一个公共点,(其实可以缩块),那个公共点是割点。HDU数据弱,网上很多错误代码和解法也可以过。

个人解法:

我认为:

:仙人掌图必然是欧拉图!这样只用“入度=出度”就可以简单地判断强连通(欧拉图显然强连通)了!而且这个必要(不充分)条件还秒杀好多数据(强连通++)。

个人证明:反证法:若有点的入度!=出度,(不妨设入度多),那么,对于每个出度,唯一从对应入度处“回来”,形成以个环,一出一入,一一对应,现在入度多的,只有从之前的出度中“回来”(鸽巢原理),这样该边在俩个环中了,矛盾。即证。

这样只是一个必要条件罢了,还有入度==出度的,但是明显存在很多环的情况,下面用以一种普遍的解法排除即可:用dfs一遍,当发现环时(dfs发现祖先点),标记该环上所有点(祖先点/割点除外),一次,若有一个点标记俩次以上(说明有边同时在俩个环),那么必然是非仙人掌了。

这俩个条件加起来,足以判断仙人掌图。虽然暂时无法证明其充分性,但也举不出反例。

可以在uva10510 提交,数据强一些。

转载请注明出处:http://write.blog.csdn.net/postedit?ref=toolbar

代码:

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
vector<vector<int> >e(100000);
int ind[20010];
int outd[20010];
bool judge1() //欧拉图判断
{
for(int i=0;i<n;i++)
{
if(ind[i]!=outd[i])
return 0;
}
return 1;
}
int vis[20010];
int fa[20010];
int mark[20010];
int flag=0;
void set(int u,int vv) {
mark[u]++;
while(u!=vv)
{
u=fa[u];
mark[u]++;
if(mark[u]>1&&u!=vv){flag=1;return ;}
if(u==0)break;
}
mark[vv]--; }
void dfs(int u)
{
if(flag)return ;
for(int j=0;j<e[u].size();j++)
{
int vv=e[u][j];
if(!vis[vv])
{
fa[vv]=u;
vis[vv]=1;
dfs(vv); }
else
set(u,vv);
}
return ;
}
bool judge2() //判定2
{
vis[0]=1;
dfs(0);
if(flag)return 0;
for(int i=0;i<n;i++)
{
if(mark[i]>1)
return 0;
}
return 1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=0;i<=n;i++)
{
fa[i]=-1;
mark[i]=vis[i]=ind[i]=outd[i]=0;
e[i].clear();
}
flag=0;
int ta,tb;
scanf("%d%d",&ta,&tb);
while(ta!=0||tb!=0)
{
e[ta].push_back(tb);
outd[ta]++;
ind[tb]++;
scanf("%d%d",&ta,&tb);
} if(!judge1())
{
printf("NO\n");
continue;
}
else
{ if(!judge2())
printf("NO\n");
else printf("YES\n");
}
}
return 0; }

hdu 3594 Cactus /uva 10510 仙人掌图判定的更多相关文章

  1. HDU 3594 Cactus 有向仙人掌图判定

    题意 给出一个有向图,并给出仙人掌图的定义 图本身是强连通的 每条边属于且只属于一个环 判断输入的图是否是强连通的. 分析 杭电OJ上的数据比较弱,网上一些有明显错误的代码也能AC. 本着求真务实的精 ...

  2. hdu 3594 强连通好题仙人掌图,对自己的tarjan模板改下用这个

    #include<stdio.h> #include<string.h> #define N 21000 struct node { int v,next; }bian[510 ...

  3. 仙人掌图判定及求直径HDU3594 BZOJ1023

    https://wenku.baidu.com/view/ce296043192e45361066f575.html   //仙人掌图基础知识3个判定条件 http://blog.csdn.net/y ...

  4. HDU 3594.Cactus 仙人掌图

    Cactus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. HDU 3594 Cactus (强连通+仙人掌图)

    <题目链接> <转载于 >>> > 题目大意: 给你一个图,让你判断他是不是仙人掌图. 仙人掌图的条件是: 1.是强连通图. 2.每条边在仙人掌图中只属于一个 ...

  6. HDU - 3594 Cactus

    这是一个有向仙人掌的题目,要求判定给定的图是不是强连通图,而且每一条边只能出现在一个环中,这里有一个介绍有向仙人掌的文档:http://files.cnblogs.com/ambition/cactu ...

  7. HDU 3594 Cactus(仙人掌问题)

    http://acm.hdu.edu.cn/showproblem.php?pid=3594 题意: 一个有向图,判断是否强连通和每条边只在一个环中. 思路: 仙人掌问题. 用Tarjan算法判断强连 ...

  8. hdu - 3594 Cactus (强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=3594 判断给定的图是否是强连通的,并且每条边都只属于一个连通分量. 判断强连通只需要判断缩点之后顶点数是否为1即 ...

  9. HDU 3594 Cactus (强连通分量 + 一个边只能在一个环里)

    题意:判断题目中给出的图是否符合两个条件.1 这图只有一个强连通分量 2 一条边只能出现在一个环里. 思路:条件1的满足只需要tarjan算法正常求强连通分量即可,关键是第二个条件,我们把对边的判断转 ...

随机推荐

  1. python基础一 day11 装饰器复习

    # 复习# 讲作业# 装饰器的进阶 # functools.wraps # 带参数的装饰器 # 多个装饰器装饰同一个函数# 周末的作业 # 文件操作 # 字符串处理 # 输入输出 # 流程控制 # 装 ...

  2. bootstrap 按钮组的嵌套

    您可以在一个按钮组内嵌套另一个按钮组,即,在一个 .btn-group 内嵌套另一个 .btn-group .当您想让下拉菜单与一系列按钮组合使用时,就会用到这个. 实例: <!DOCTYPE ...

  3. ios之UIToolBar

    toolbar除了可以和navigationController一起用之外,也可以独立用到view里.工具栏UIToolbar – 一般显示在底部,用于提供一组选项,让用户执行一些功能,而并非用于在完 ...

  4. 用Python写一个小爬虫吧!

    学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习. 我在此之前接触过Python,也写过一些小脚 ...

  5. 初涉倍增&&LCA【在更】

    一种特殊的枚举算法 什么是倍增 顾名思义,即每一次翻倍增加.那么,这样我们就有了一种$O(logn)$阶的方法处理枚举方面的问题了. 参考:[白话系列]倍增算法 一些题目 [倍增]luoguP1613 ...

  6. [LUOGU] P1111 修复公路

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  7. Vue的响应式规则

    对象属性的响应规则 <body> <div id="root"> {{msg}} </div> </body> <script ...

  8. pymongo的简单使用

    pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client ...

  9. Python9-集合-day7

    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的. 以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试 ...

  10. (转)去除背景色的方法,适合iOS5/6/7/8.0beta

    通常使用UISearchbar都需要去除其背景色来与自己的界面风格保持协调,但是UISearchbar的设计随着iOS版本的升级不断地在发生着变化,下面我们通过分析UISearchbar在各个iOS版 ...