hdu 3594 Cactus
来源:互联网 发布:mac安装ps序列号 编辑:程序博客网 时间:2024/05/06 05:29
题意:给一张图判断是不是强连通+所有边都在一个圈里
就是判断一张图是不是仙人掌图。
仙人掌图的性质:
1.没有横向边
2.图中没有桥
3.每个点的逆向边和low[v]值比dfn[u]小的子节点v的数量和小于2
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<vector>using namespace std;int dfn[20005],low[20005],cnt,n;bool mark[20005],ans;vector<int> G[20005];void Tayjan(int x){dfn[x]=low[x]=cnt++;int c=0;for(vector<int>::iterator it=G[x].begin();it!=G[x].end();it++){if(mark[*it]) ans=false; if(!dfn[*it]){Tayjan(*it);low[x]=min(low[x],low[*it]);if(low[*it]>dfn[x]) ans=false;if(low[*it]<dfn[x]) c++;}else{low[x]=min(low[x],dfn[*it]);c++;}if(c>=2) ans=false;}mark[x]=true;return;}void init(){memset(mark,0,sizeof(mark));memset(dfn,0,sizeof(dfn));ans=true;cnt=1;for(int i=0;i<=n;i++){G[i].clear();}return;}void input(){int a,b;while(scanf("%d%d",&a,&b)!=EOF&&(a||b)){G[a].push_back(b);}return;}int main(){int t;scanf("%d",&t);while(t--){scanf("%d",&n);init();input();Tayjan(0);for(int i=0;i<=n-1;i++) if(!dfn[i]) ans=false;if(ans) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;}
0 0
- HDU 3594 Cactus
- HDU 3594 Cactus 仙人掌
- HDU - 3594 Cactus
- HDU 3594 Cactus
- hdu 3594 Cactus
- HDU 3594 Cactus
- HDU 3594 Cactus 强连通
- HDU - 3594 Cactus(仙人掌图)
- HDU 3594 Cactus 【强连通】
- HDU Cactus 3594 仙人掌图
- hdu 3594 Cactus(仙人掌图)
- hdu 3594 Cactus (仙人掌图判定/SCC)
- HDU 3594 Cactus(强连通)
- HDU 3594 Cactus(仙人掌图模板)
- HDU --- 3594 Cactus 【仙人掌图的运用】
- HDU 3594 Cactus (仙人掌图、Tarjan)
- HDU 3594 Cactus 图的强联通 tarjan
- HDU 3594 Cactus 判断一条边是否在多个环内
- POSIX线程的同步
- 数据结构-6-深度广度遍历搜索原理详解
- opencv3.0.0 如何将 CvMat ,IplImage* 转换为Mat格式
- JavaScript、JQuery、Ajax区别与联系
- 采集元数据的C++实现
- hdu 3594 Cactus
- 【8.29】阿里巴巴2014年校招(软件测试攻城师)笔试题目
- HDU 1326 Box of Bricks(数学题)
- Linux下使用diff/patch制作/使用补丁文件
- DSA通信原理-步骤详解
- JNI实现Java调用C/C++语言
- APP开发之Viewpage+Fragment+下拉刷新
- 搜索引擎的预处理
- 关联、组合、聚合、依赖关系比较