并查集树数据结构hdu1325
来源:互联网 发布:传智播客c语言视频 编辑:程序博客网 时间:2024/06/10 01:39
我的解法就是去构造了一棵树
以数组的存储方式
数组的值存放节点的根!
排除空树
剩下的就是出现环和多根节点的情况
也就是排除森林和有一个节点多个入度的情况
排除森林就用到了并查集
也就是便利数组让其只有一个根
排除多个入度的情况更简单
就是把这个点插入到数上时
如果这个点已经有了根节点,就出现了两个入度
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int sett[1000 + 100],g[1000 + 100];int find2(int x){ while(x != sett[x] ) x = sett[x]; return x;}int main(){ int x,y,flag=1,cases=1; while(scanf("%d%d",&x,&y)){ flag=1; for(int i=1;i<=1000;i++) sett[i]=i;// for(int i=1;i<=1000;i++) g[i]=i; memset(g,0,sizeof(g)); if(x == 0 && y == 0) flag=0; if(x < 0 && y < 0) break; else sett[y]=x; g[x]=1; g[y]=1; while(scanf("%d%d",&x,&y)){ g[x]=1; g[y]=1; if(!x&&!y) break; int fx = sett[x]; int fy = sett[y]; if( fy != y) //out circle and two roots flag=0; else sett[fy]=fx; } int countt=0; for(int i=1;i<=1000;i++) if(g[i]&&sett[i]==i) countt++;// printf("countt %d\n",countt); if(countt > 1) flag=0;// printf("flag %d\n",flag if(flag) printf("Case %d is a tree.\n",cases); else printf("Case %d is not a tree.\n",cases); cases++;// for(int i=1;i<=10;i++)// printf("%d ",i);// printf("\n");// for(int i=1;i<=10;i++)// printf("%d ",sett[i]);// printf("\n"); } return 0;}
0 0
- 并查集树数据结构hdu1325
- hdu1325并查集
- HDU1325 并查集
- hdu1325(并查集无环连通树)
- hdu1325
- hdu1325 hdu1272 hdu1232 并查集应用
- HDU1325 &&poj1308 基础并查集
- hdu1325 并查集-好题
- hdu1325 Is It A Tree?并差集实现
- hdu1325&&poj1308 Is It A Tree? 基础并查集
- hdu1325 Is It A Tree?并查集
- HDU1325并查集判断是否为一棵树
- HDU1325 Is It A Tree? 并查集
- HDU1325 Is It A Tree? 【并查集】
- hdu1325 Is It A Tree?(并查集)
- [并查集] hdu1325 Is it a tree ?
- HDU1325 带权并查集 修改模版
- 并查集 HDU1325-Is It A Tree?
- ArcGIS中数据之间的转换接口IFeatureDataConverter2
- 富山中文离线地图App上线
- Linux检测TCP连接断开的一种简单实现方法http://blog.csdn.net/wtewrw/article/details/6547380
- Linear Regression Logistic Regression
- 与基类对象和派生类对象相关的赋值兼容问题
- 并查集树数据结构hdu1325
- 抽象类和接口的区别,使用场景
- 横滨中文离线地图App上线
- 大一之路
- 优化Android Studio/Gradle构建
- c语言中double型数据的输入
- vc 关闭对话框几种方法
- 设置、修改Linux时区
- 虚拟机下centos6的网络IP配置